diff --git a/Directory.Build.props b/Directory.Build.props
index 54b2c66e..12dbfb4f 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -3,7 +3,7 @@
7.1.0
2.10.0
- 2.4.0
+ 2.5.0
1.4.0
0.5.0
1.9.0
diff --git a/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Application.Contracts/EasyAbp/EShop/Orders/Orders/Dtos/OrderDto.cs b/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Application.Contracts/EasyAbp/EShop/Orders/Orders/Dtos/OrderDto.cs
index 85910d3d..462871f2 100644
--- a/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Application.Contracts/EasyAbp/EShop/Orders/Orders/Dtos/OrderDto.cs
+++ b/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Application.Contracts/EasyAbp/EShop/Orders/Orders/Dtos/OrderDto.cs
@@ -47,8 +47,10 @@ namespace EasyAbp.EShop.Orders.Orders.Dtos
public DateTime? PaymentExpiration { get; set; }
+ IEnumerable IOrder.OrderLines => OrderLines;
public List OrderLines { get; set; }
+ IEnumerable IOrder.OrderExtraFees => OrderExtraFees;
public List OrderExtraFees { get; set; }
}
}
\ No newline at end of file
diff --git a/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Application.Contracts/EasyAbp/EShop/Orders/Orders/Dtos/OrderExtraFeeDto.cs b/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Application.Contracts/EasyAbp/EShop/Orders/Orders/Dtos/OrderExtraFeeDto.cs
index 91ca226a..3eab5fad 100644
--- a/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Application.Contracts/EasyAbp/EShop/Orders/Orders/Dtos/OrderExtraFeeDto.cs
+++ b/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Application.Contracts/EasyAbp/EShop/Orders/Orders/Dtos/OrderExtraFeeDto.cs
@@ -2,12 +2,16 @@
namespace EasyAbp.EShop.Orders.Orders.Dtos
{
- public class OrderExtraFeeDto
+ public class OrderExtraFeeDto : IOrderExtraFee
{
+ public Guid OrderId { get; }
+
public string Name { get; set; }
-
+
public string Key { get; set; }
-
+
public decimal Fee { get; set; }
+
+ public decimal RefundAmount { get; }
}
}
\ No newline at end of file
diff --git a/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain.Shared/EasyAbp/EShop/Orders/Orders/IOrder.cs b/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain.Shared/EasyAbp/EShop/Orders/Orders/IOrder.cs
index fc205188..ee3d6581 100644
--- a/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain.Shared/EasyAbp/EShop/Orders/Orders/IOrder.cs
+++ b/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain.Shared/EasyAbp/EShop/Orders/Orders/IOrder.cs
@@ -1,50 +1,61 @@
using System;
+using System.Collections.Generic;
using EasyAbp.EShop.Stores.Stores;
+using JetBrains.Annotations;
using Volo.Abp.Data;
namespace EasyAbp.EShop.Orders.Orders
{
public interface IOrder : IMultiStore, IHasExtraProperties
{
+ [NotNull]
string OrderNumber { get; }
-
+
Guid CustomerUserId { get; }
-
+
OrderStatus OrderStatus { get; }
+ [NotNull]
string Currency { get; }
-
+
decimal ProductTotalPrice { get; }
-
+
decimal TotalDiscount { get; }
-
+
decimal TotalPrice { get; }
-
+
///
/// ActualTotalPrice = TotalPrice - TotalDiscount
///
decimal ActualTotalPrice { get; }
decimal RefundAmount { get; }
-
+
+ [CanBeNull]
string CustomerRemark { get; }
-
+
+ [CanBeNull]
string StaffRemark { get; }
-
+
Guid? PaymentId { get; }
-
+
DateTime? PaidTime { get; }
-
+
DateTime? CompletionTime { get; }
-
+
DateTime? CanceledTime { get; }
-
+
+ [CanBeNull]
string CancellationReason { get; }
-
+
DateTime? ReducedInventoryAfterPlacingTime { get; }
-
+
DateTime? ReducedInventoryAfterPaymentTime { get; }
-
+
DateTime? PaymentExpiration { get; }
+
+ IEnumerable OrderLines { get; }
+
+ IEnumerable OrderExtraFees { get; }
}
}
\ No newline at end of file
diff --git a/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain.Shared/EasyAbp/EShop/Orders/Orders/IOrderExtraFee.cs b/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain.Shared/EasyAbp/EShop/Orders/Orders/IOrderExtraFee.cs
new file mode 100644
index 00000000..6d6a82ed
--- /dev/null
+++ b/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain.Shared/EasyAbp/EShop/Orders/Orders/IOrderExtraFee.cs
@@ -0,0 +1,20 @@
+using System;
+using JetBrains.Annotations;
+
+namespace EasyAbp.EShop.Orders.Orders
+{
+ public interface IOrderExtraFee
+ {
+ Guid OrderId { get; }
+
+ [NotNull]
+ string Name { get; }
+
+ [CanBeNull]
+ string Key { get; }
+
+ decimal Fee { get; }
+
+ decimal RefundAmount { get; }
+ }
+}
\ No newline at end of file
diff --git a/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain.Shared/EasyAbp/EShop/Orders/Orders/IOrderLine.cs b/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain.Shared/EasyAbp/EShop/Orders/Orders/IOrderLine.cs
index f63f14a3..88baf0e7 100644
--- a/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain.Shared/EasyAbp/EShop/Orders/Orders/IOrderLine.cs
+++ b/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain.Shared/EasyAbp/EShop/Orders/Orders/IOrderLine.cs
@@ -1,5 +1,6 @@
using System;
using EasyAbp.EShop.Products.Products;
+using JetBrains.Annotations;
using Volo.Abp.Data;
namespace EasyAbp.EShop.Orders.Orders
@@ -16,12 +17,16 @@ namespace EasyAbp.EShop.Orders.Orders
DateTime? ProductDetailModificationTime { get; }
+ [NotNull]
string ProductGroupName { get; }
+ [NotNull]
string ProductGroupDisplayName { get; }
+ [CanBeNull]
string ProductUniqueName { get; }
+ [NotNull]
string ProductDisplayName { get; }
///
@@ -30,12 +35,16 @@ namespace EasyAbp.EShop.Orders.Orders
///
InventoryStrategy? ProductInventoryStrategy { get; }
+ [CanBeNull]
string SkuName { get; }
+ [CanBeNull]
string SkuDescription { get; }
+ [CanBeNull]
string MediaResources { get; }
+ [NotNull]
string Currency { get; }
decimal UnitPrice { get; }
diff --git a/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain.Shared/EasyAbp/EShop/Orders/Orders/OrderEto.cs b/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain.Shared/EasyAbp/EShop/Orders/Orders/OrderEto.cs
index 534aa74e..e9ea4c98 100644
--- a/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain.Shared/EasyAbp/EShop/Orders/Orders/OrderEto.cs
+++ b/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain.Shared/EasyAbp/EShop/Orders/Orders/OrderEto.cs
@@ -54,8 +54,12 @@ namespace EasyAbp.EShop.Orders.Orders
public DateTime? PaymentExpiration { get; set; }
+ IEnumerable IOrder.OrderLines => OrderLines;
public List OrderLines { get; set; }
-
+
+ IEnumerable IOrder.OrderExtraFees => OrderExtraFees;
+ public List OrderExtraFees { get; set; }
+
public DateTime CreationTime { get; set; }
public Guid? CreatorId { get; set; }
diff --git a/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain.Shared/EasyAbp/EShop/Orders/Orders/OrderExtraFeeEto.cs b/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain.Shared/EasyAbp/EShop/Orders/Orders/OrderExtraFeeEto.cs
new file mode 100644
index 00000000..7453999e
--- /dev/null
+++ b/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain.Shared/EasyAbp/EShop/Orders/Orders/OrderExtraFeeEto.cs
@@ -0,0 +1,18 @@
+using System;
+
+namespace EasyAbp.EShop.Orders.Orders
+{
+ [Serializable]
+ public class OrderExtraFeeEto : IOrderExtraFee
+ {
+ public Guid OrderId { get; set; }
+
+ public string Name { get; set; }
+
+ public string Key { get; set; }
+
+ public decimal Fee { get; set; }
+
+ public decimal RefundAmount { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain/EasyAbp/EShop/Orders/Orders/Order.cs b/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain/EasyAbp/EShop/Orders/Orders/Order.cs
index 06fa086c..9903d736 100644
--- a/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain/EasyAbp/EShop/Orders/Orders/Order.cs
+++ b/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain/EasyAbp/EShop/Orders/Orders/Order.cs
@@ -1,9 +1,7 @@
using System;
using System.Collections.Generic;
-using EasyAbp.EShop.Stores.Stores;
using System.Linq;
using JetBrains.Annotations;
-using Volo.Abp.Data;
using Volo.Abp.Domain.Entities.Auditing;
using Volo.Abp.MultiTenancy;
@@ -15,14 +13,12 @@ namespace EasyAbp.EShop.Orders.Orders
public virtual Guid StoreId { get; protected set; }
- [NotNull]
public virtual string OrderNumber { get; protected set; }
public virtual Guid CustomerUserId { get; protected set; }
public virtual OrderStatus OrderStatus { get; protected set; }
- [NotNull]
public virtual string Currency { get; protected set; }
public virtual decimal ProductTotalPrice { get; protected set; }
@@ -35,10 +31,8 @@ namespace EasyAbp.EShop.Orders.Orders
public virtual decimal RefundAmount { get; protected set; }
- [CanBeNull]
public virtual string CustomerRemark { get; protected set; }
- [CanBeNull]
public virtual string StaffRemark { get; protected set; }
public virtual Guid? PaymentId { get; protected set; }
@@ -49,7 +43,6 @@ namespace EasyAbp.EShop.Orders.Orders
public virtual DateTime? CanceledTime { get; protected set; }
- [CanBeNull]
public virtual string CancellationReason { get; protected set; }
public virtual DateTime? ReducedInventoryAfterPlacingTime { get; protected set; }
@@ -57,9 +50,11 @@ namespace EasyAbp.EShop.Orders.Orders
public virtual DateTime? ReducedInventoryAfterPaymentTime { get; protected set; }
public virtual DateTime? PaymentExpiration { get; protected set; }
-
+
+ IEnumerable IOrder.OrderLines => OrderLines;
public virtual List OrderLines { get; protected set; }
+ IEnumerable IOrder.OrderExtraFees => OrderExtraFees;
public virtual List OrderExtraFees { get; protected set; }
protected Order()
diff --git a/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain/EasyAbp/EShop/Orders/Orders/OrderExtraFee.cs b/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain/EasyAbp/EShop/Orders/Orders/OrderExtraFee.cs
index 1d2f85bd..c6a62379 100644
--- a/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain/EasyAbp/EShop/Orders/Orders/OrderExtraFee.cs
+++ b/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain/EasyAbp/EShop/Orders/Orders/OrderExtraFee.cs
@@ -4,7 +4,7 @@ using Volo.Abp.Domain.Entities;
namespace EasyAbp.EShop.Orders.Orders
{
- public class OrderExtraFee : Entity
+ public class OrderExtraFee : Entity, IOrderExtraFee
{
public virtual Guid OrderId { get; protected set; }
diff --git a/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain/EasyAbp/EShop/Orders/Orders/OrderLine.cs b/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain/EasyAbp/EShop/Orders/Orders/OrderLine.cs
index 34b7a033..2e51295e 100644
--- a/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain/EasyAbp/EShop/Orders/Orders/OrderLine.cs
+++ b/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain/EasyAbp/EShop/Orders/Orders/OrderLine.cs
@@ -19,30 +19,22 @@ namespace EasyAbp.EShop.Orders.Orders
public virtual DateTime? ProductDetailModificationTime { get; protected set; }
- [NotNull]
public virtual string ProductGroupName { get; protected set; }
- [NotNull]
public virtual string ProductGroupDisplayName { get; protected set; }
- [CanBeNull]
public virtual string ProductUniqueName { get; protected set; }
- [NotNull]
public virtual string ProductDisplayName { get; protected set; }
public virtual InventoryStrategy? ProductInventoryStrategy { get; protected set; }
- [CanBeNull]
public virtual string SkuName { get; protected set; }
- [CanBeNull]
public virtual string SkuDescription { get; protected set; }
- [CanBeNull]
public virtual string MediaResources { get; protected set; }
- [NotNull]
public virtual string Currency { get; protected set; }
public virtual decimal UnitPrice { get; protected set; }
diff --git a/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain/EasyAbp/EShop/Orders/OrdersDomainAutoMapperProfile.cs b/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain/EasyAbp/EShop/Orders/OrdersDomainAutoMapperProfile.cs
index 266f427e..3d74d29c 100644
--- a/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain/EasyAbp/EShop/Orders/OrdersDomainAutoMapperProfile.cs
+++ b/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain/EasyAbp/EShop/Orders/OrdersDomainAutoMapperProfile.cs
@@ -12,6 +12,7 @@ namespace EasyAbp.EShop.Orders
* into multiple profile classes for a better organization. */
CreateMap();
CreateMap();
+ CreateMap();
}
}
}
diff --git a/modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.Application.Contracts/EasyAbp/EShop/Payments/Payments/Dtos/PaymentDto.cs b/modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.Application.Contracts/EasyAbp/EShop/Payments/Payments/Dtos/PaymentDto.cs
index 64b0c40c..cd9ee32c 100644
--- a/modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.Application.Contracts/EasyAbp/EShop/Payments/Payments/Dtos/PaymentDto.cs
+++ b/modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.Application.Contracts/EasyAbp/EShop/Payments/Payments/Dtos/PaymentDto.cs
@@ -11,9 +11,9 @@ namespace EasyAbp.EShop.Payments.Payments.Dtos
#region Base properties
public Guid UserId { get; set; }
-
+
public string PaymentMethod { get; set; }
-
+
public string PayeeAccount { get; set; }
public string ExternalTradingCode { get; set; }
@@ -27,15 +27,16 @@ namespace EasyAbp.EShop.Payments.Payments.Dtos
public decimal ActualPaymentAmount { get; set; }
public decimal RefundAmount { get; set; }
-
+
public decimal PendingRefundAmount { get; set; }
public DateTime? CompletionTime { get; set; }
-
+
public DateTime? CanceledTime { get; set; }
-
+
#endregion
-
+
+ IEnumerable IPayment.PaymentItems => PaymentItems;
public List PaymentItems { get; set; }
}
}
\ No newline at end of file
diff --git a/modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.Application.Contracts/EasyAbp/EShop/Payments/Refunds/Dtos/RefundDto.cs b/modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.Application.Contracts/EasyAbp/EShop/Payments/Refunds/Dtos/RefundDto.cs
index 6ba6529c..9c142db9 100644
--- a/modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.Application.Contracts/EasyAbp/EShop/Payments/Refunds/Dtos/RefundDto.cs
+++ b/modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.Application.Contracts/EasyAbp/EShop/Payments/Refunds/Dtos/RefundDto.cs
@@ -19,19 +19,20 @@ namespace EasyAbp.EShop.Payments.Refunds.Dtos
public string Currency { get; set; }
public decimal RefundAmount { get; set; }
-
+
public string DisplayReason { get; set; }
public string CustomerRemark { get; set; }
public string StaffRemark { get; set; }
-
+
public DateTime? CompletedTime { get; set; }
-
+
public DateTime? CanceledTime { get; set; }
-
+
#endregion
-
+
+ IEnumerable IRefund.RefundItems => RefundItems;
public List RefundItems { get; set; }
}
}
\ No newline at end of file
diff --git a/modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.Domain.Shared/EasyAbp/EShop/Payments/Payments/EShopPaymentEto.cs b/modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.Domain.Shared/EasyAbp/EShop/Payments/Payments/EShopPaymentEto.cs
index 188ff539..4092e5e8 100644
--- a/modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.Domain.Shared/EasyAbp/EShop/Payments/Payments/EShopPaymentEto.cs
+++ b/modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.Domain.Shared/EasyAbp/EShop/Payments/Payments/EShopPaymentEto.cs
@@ -14,7 +14,7 @@ namespace EasyAbp.EShop.Payments.Payments
public Guid Id { get; set; }
public Guid? TenantId { get; set; }
-
+
public Guid UserId { get; set; }
public string PaymentMethod { get; set; }
@@ -41,6 +41,7 @@ namespace EasyAbp.EShop.Payments.Payments
#endregion
- public List PaymentItems { get; set; } = new List();
+ IEnumerable IPayment.PaymentItems => PaymentItems;
+ public List PaymentItems { get; set; } = new();
}
}
\ No newline at end of file
diff --git a/modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.Domain.Shared/EasyAbp/EShop/Payments/Refunds/EShopRefundEto.cs b/modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.Domain.Shared/EasyAbp/EShop/Payments/Refunds/EShopRefundEto.cs
index 11f3595a..1fa8900e 100644
--- a/modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.Domain.Shared/EasyAbp/EShop/Payments/Refunds/EShopRefundEto.cs
+++ b/modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.Domain.Shared/EasyAbp/EShop/Payments/Refunds/EShopRefundEto.cs
@@ -16,27 +16,28 @@ namespace EasyAbp.EShop.Payments.Refunds
public Guid? TenantId { get; set; }
public Guid PaymentId { get; set; }
-
+
public string RefundPaymentMethod { get; set; }
-
+
public string ExternalTradingCode { get; set; }
-
+
public string Currency { get; set; }
-
+
public decimal RefundAmount { get; set; }
-
+
public string DisplayReason { get; set; }
public string CustomerRemark { get; set; }
-
+
public string StaffRemark { get; set; }
-
+
public DateTime? CompletedTime { get; set; }
-
+
public DateTime? CanceledTime { get; set; }
-
+
#endregion
- public List RefundItems { get; set; } = new List();
+ IEnumerable IRefund.RefundItems => RefundItems;
+ public List RefundItems { get; set; } = new();
}
}
\ No newline at end of file
diff --git a/modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.Domain/EasyAbp/EShop/Payments/Payments/Payment.cs b/modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.Domain/EasyAbp/EShop/Payments/Payments/Payment.cs
index 8e3276e0..e1c42c61 100644
--- a/modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.Domain/EasyAbp/EShop/Payments/Payments/Payment.cs
+++ b/modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.Domain/EasyAbp/EShop/Payments/Payments/Payment.cs
@@ -10,44 +10,44 @@ namespace EasyAbp.EShop.Payments.Payments
public class Payment : FullAuditedAggregateRoot, IPayment, IMultiTenant
{
#region Base properties
-
+
public virtual Guid? TenantId { get; protected set; }
-
+
public virtual Guid UserId { get; protected set; }
-
+
[NotNull]
public virtual string PaymentMethod { get; protected set; }
-
+
[CanBeNull]
public virtual string PayeeAccount { get; protected set; }
-
+
[CanBeNull]
public virtual string ExternalTradingCode { get; protected set; }
-
+
[NotNull]
public virtual string Currency { get; protected set; }
-
+
public virtual decimal OriginalPaymentAmount { get; protected set; }
public virtual decimal PaymentDiscount { get; protected set; }
-
+
public virtual decimal ActualPaymentAmount { get; protected set; }
-
+
public virtual decimal RefundAmount { get; protected set; }
-
+
public virtual decimal PendingRefundAmount { get; protected set; }
public virtual DateTime? CompletionTime { get; protected set; }
-
+
public virtual DateTime? CanceledTime { get; protected set; }
-
+
+ IEnumerable IPayment.PaymentItems => PaymentItems;
public virtual List PaymentItems { get; protected set; }
-
+
#endregion
protected Payment()
{
-
}
public void SetPaymentItems(List paymentItems)
diff --git a/modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.Domain/EasyAbp/EShop/Payments/Refunds/Refund.cs b/modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.Domain/EasyAbp/EShop/Payments/Refunds/Refund.cs
index 6149292f..167a49b5 100644
--- a/modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.Domain/EasyAbp/EShop/Payments/Refunds/Refund.cs
+++ b/modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.Domain/EasyAbp/EShop/Payments/Refunds/Refund.cs
@@ -12,41 +12,41 @@ namespace EasyAbp.EShop.Payments.Refunds
#region Base properties
public virtual Guid? TenantId { get; protected set; }
-
+
public virtual Guid PaymentId { get; protected set; }
-
+
[NotNull]
public virtual string RefundPaymentMethod { get; protected set; }
-
+
[NotNull]
public virtual string ExternalTradingCode { get; protected set; }
-
+
[NotNull]
public virtual string Currency { get; protected set; }
-
+
public virtual decimal RefundAmount { get; protected set; }
-
+
public virtual string DisplayReason { get; protected set; }
[CanBeNull]
public virtual string CustomerRemark { get; protected set; }
-
+
[CanBeNull]
public virtual string StaffRemark { get; protected set; }
public virtual DateTime? CompletedTime { get; protected set; }
-
+
public virtual DateTime? CanceledTime { get; protected set; }
-
+
#endregion
-
+
+ IEnumerable IRefund.RefundItems => RefundItems;
public virtual List RefundItems { get; protected set; }
protected Refund()
{
-
}
-
+
public void SetRefundItems(List refundItems)
{
RefundItems = refundItems;
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Products/Dtos/ProductAttributeDto.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Products/Dtos/ProductAttributeDto.cs
index 0e75efce..cad078c6 100644
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Products/Dtos/ProductAttributeDto.cs
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Products/Dtos/ProductAttributeDto.cs
@@ -6,7 +6,7 @@ using Volo.Abp.Application.Dtos;
namespace EasyAbp.EShop.Products.Products.Dtos
{
[Serializable]
- public class ProductAttributeDto : ExtensibleFullAuditedEntityDto
+ public class ProductAttributeDto : ExtensibleFullAuditedEntityDto, IProductAttribute
{
[Required]
public string DisplayName { get; set; }
@@ -15,6 +15,7 @@ namespace EasyAbp.EShop.Products.Products.Dtos
public int DisplayOrder { get; set; }
+ IEnumerable IProductAttribute.ProductAttributeOptions => ProductAttributeOptions;
public List ProductAttributeOptions { get; set; }
}
}
\ No newline at end of file
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Products/Dtos/ProductAttributeOptionDto.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Products/Dtos/ProductAttributeOptionDto.cs
index 577a8519..b6f64c92 100644
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Products/Dtos/ProductAttributeOptionDto.cs
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Products/Dtos/ProductAttributeOptionDto.cs
@@ -5,7 +5,7 @@ using Volo.Abp.Application.Dtos;
namespace EasyAbp.EShop.Products.Products.Dtos
{
[Serializable]
- public class ProductAttributeOptionDto : ExtensibleFullAuditedEntityDto
+ public class ProductAttributeOptionDto : ExtensibleFullAuditedEntityDto, IProductAttributeOption
{
[Required]
public string DisplayName { get; set; }
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Products/Dtos/ProductDto.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Products/Dtos/ProductDto.cs
index bd91407a..ba66ba3d 100644
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Products/Dtos/ProductDto.cs
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Products/Dtos/ProductDto.cs
@@ -6,7 +6,7 @@ using Volo.Abp.Application.Dtos;
namespace EasyAbp.EShop.Products.Products.Dtos
{
[Serializable]
- public class ProductDto : ExtensibleFullAuditedEntityDto
+ public class ProductDto : ExtensibleFullAuditedEntityDto, IProduct
{
public Guid StoreId { get; set; }
@@ -44,8 +44,10 @@ namespace EasyAbp.EShop.Products.Products.Dtos
public decimal? MaximumPrice { get; set; }
+ IEnumerable IProduct.ProductAttributes => ProductAttributes;
public List ProductAttributes { get; set; }
+ IEnumerable IProduct.ProductSkus => ProductSkus;
public List ProductSkus { get; set; }
public ProductSkuDto GetSkuById(Guid skuId)
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Products/Dtos/ProductSkuDto.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Products/Dtos/ProductSkuDto.cs
index 0a2429a4..21e8686c 100644
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Products/Dtos/ProductSkuDto.cs
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Products/Dtos/ProductSkuDto.cs
@@ -6,10 +6,9 @@ using Volo.Abp.Data;
namespace EasyAbp.EShop.Products.Products.Dtos
{
[Serializable]
- public class ProductSkuDto : ExtensibleFullAuditedEntityDto
+ public class ProductSkuDto : ExtensibleFullAuditedEntityDto, IProductSku
{
public List AttributeOptionIds { get; set; }
-
public string Name { get; set; }
public string Currency { get; set; }
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Products/Dtos/ProductViewDto.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Products/Dtos/ProductViewDto.cs
index 46a617cd..a05e6691 100644
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Products/Dtos/ProductViewDto.cs
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Products/Dtos/ProductViewDto.cs
@@ -1,11 +1,10 @@
using System;
-using System.Collections.Generic;
using Volo.Abp.Application.Dtos;
namespace EasyAbp.EShop.Products.Products.Dtos
{
[Serializable]
- public class ProductViewDto : ExtensibleCreationAuditedEntityDto
+ public class ProductViewDto : ExtensibleCreationAuditedEntityDto, IProductBase
{
public Guid StoreId { get; set; }
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/Products/ProductAppService.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/Products/ProductAppService.cs
index c3528d6a..d665704a 100644
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/Products/ProductAppService.cs
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/Products/ProductAppService.cs
@@ -32,7 +32,6 @@ namespace EasyAbp.EShop.Products.Products
private readonly EShopProductsOptions _options;
private readonly IProductInventoryProviderResolver _productInventoryProviderResolver;
private readonly IProductViewCacheKeyProvider _productViewCacheKeyProvider;
- private readonly IAttributeOptionIdsSerializer _attributeOptionIdsSerializer;
private readonly IProductRepository _repository;
public ProductAppService(
@@ -41,7 +40,6 @@ namespace EasyAbp.EShop.Products.Products
IDistributedCache cache,
IProductInventoryProviderResolver productInventoryProviderResolver,
IProductViewCacheKeyProvider productViewCacheKeyProvider,
- IAttributeOptionIdsSerializer attributeOptionIdsSerializer,
IProductRepository repository) : base(repository)
{
_productManager = productManager;
@@ -49,7 +47,6 @@ namespace EasyAbp.EShop.Products.Products
_options = options.Value;
_productInventoryProviderResolver = productInventoryProviderResolver;
_productViewCacheKeyProvider = productViewCacheKeyProvider;
- _attributeOptionIdsSerializer = attributeOptionIdsSerializer;
_repository = repository;
}
@@ -127,21 +124,11 @@ namespace EasyAbp.EShop.Products.Products
return dto;
}
- protected virtual async Task UpdateProductAttributesAsync(Product product, CreateUpdateProductDto input)
+ protected virtual Task UpdateProductAttributesAsync(Product product, CreateUpdateProductDto input)
{
var isProductSkusEmpty = product.ProductSkus.IsNullOrEmpty();
- var usedAttributeOptionIds = new HashSet();
-
- foreach (var serializedAttributeOptionIds in product.ProductSkus.Select(sku =>
- sku.SerializedAttributeOptionIds))
- {
- foreach (var attributeOptionId in await _attributeOptionIdsSerializer.DeserializeAsync(
- serializedAttributeOptionIds))
- {
- usedAttributeOptionIds.Add(attributeOptionId);
- }
- }
+ var usedAttributeOptionIds = new HashSet(product.ProductSkus.SelectMany(x => x.AttributeOptionIds));
foreach (var attributeDto in input.ProductAttributes)
{
@@ -198,6 +185,7 @@ namespace EasyAbp.EShop.Products.Products
}
product.ProductAttributes.RemoveAll(a => removedAttributeNames.Contains(a.DisplayName));
+ return Task.CompletedTask;
}
public override async Task GetAsync(Guid id)
@@ -528,11 +516,11 @@ namespace EasyAbp.EShop.Products.Products
return Task.CompletedTask;
}
- protected virtual async Task MapToProductSkuAsync(CreateProductSkuDto createInput)
+ protected virtual Task MapToProductSkuAsync(CreateProductSkuDto createInput)
{
var entity = new ProductSku(
GuidGenerator.Create(),
- await _attributeOptionIdsSerializer.SerializeAsync(createInput.AttributeOptionIds),
+ createInput.AttributeOptionIds,
createInput.Name,
createInput.Currency,
createInput.OriginalPrice,
@@ -546,7 +534,7 @@ namespace EasyAbp.EShop.Products.Products
createInput.MapExtraPropertiesTo(entity);
- return entity;
+ return Task.FromResult(entity);
}
protected virtual Task MapToProductSkuAsync(UpdateProductSkuDto updateInput, ProductSku entity)
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/ProductsApplicationAutoMapperProfile.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/ProductsApplicationAutoMapperProfile.cs
index f575692b..0a19e6f6 100644
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/ProductsApplicationAutoMapperProfile.cs
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/ProductsApplicationAutoMapperProfile.cs
@@ -19,7 +19,7 @@ namespace EasyAbp.EShop.Products
{
public class ProductsApplicationAutoMapperProfile : Profile, ISingletonDependency
{
- public ProductsApplicationAutoMapperProfile(IAttributeOptionIdsSerializer attributeOptionIdsSerializer)
+ public ProductsApplicationAutoMapperProfile()
{
/* You can configure your AutoMapper mapping configuration here.
* Alternatively, you can split your mapping configurations
@@ -33,14 +33,10 @@ namespace EasyAbp.EShop.Products
CreateMap();
CreateMap();
CreateMap()
- .ForSourceMember(entity => entity.SerializedAttributeOptionIds, opt => opt.DoNotValidate())
- .Ignore(dto => dto.AttributeOptionIds)
.Ignore(dto => dto.Price)
.Ignore(dto => dto.DiscountedPrice)
.Ignore(dto => dto.Inventory)
- .Ignore(dto => dto.Sold)
- .AfterMap(async (src, dest) => dest.AttributeOptionIds =
- (await attributeOptionIdsSerializer.DeserializeAsync(src.SerializedAttributeOptionIds)).ToList());
+ .Ignore(dto => dto.Sold);
CreateMap(MemberList.Source)
.ForSourceMember(dto => dto.StoreId, opt => opt.DoNotValidate());
CreateMap(MemberList.Source);
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Products/IHasAttributeOptionIds.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Products/IHasAttributeOptionIds.cs
new file mode 100644
index 00000000..246a3b34
--- /dev/null
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Products/IHasAttributeOptionIds.cs
@@ -0,0 +1,9 @@
+using System;
+using System.Collections.Generic;
+
+namespace EasyAbp.EShop.Products.Products;
+
+public interface IHasAttributeOptionIds
+{
+ List AttributeOptionIds { get; }
+}
\ No newline at end of file
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Products/IProduct.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Products/IProduct.cs
index fd2a8407..ec0993b2 100644
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Products/IProduct.cs
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Products/IProduct.cs
@@ -1,34 +1,11 @@
-using System;
-using EasyAbp.EShop.Stores.Stores;
-using JetBrains.Annotations;
-using Volo.Abp.Data;
+using System.Collections.Generic;
namespace EasyAbp.EShop.Products.Products
{
- public interface IProduct : IHasExtraProperties, IMultiStore
+ public interface IProduct : IProductBase
{
- string ProductGroupName { get; }
+ IEnumerable ProductAttributes { get; }
- Guid? ProductDetailId { get; }
-
- string UniqueName { get; }
-
- string DisplayName { get; }
-
- string Overview { get; }
-
- InventoryStrategy InventoryStrategy { get; }
-
- [CanBeNull] string InventoryProviderName { get; }
-
- string MediaResources { get; }
-
- int DisplayOrder { get; }
-
- bool IsPublished { get; }
-
- bool IsStatic { get; }
-
- bool IsHidden { get; }
+ IEnumerable ProductSkus { get; }
}
}
\ No newline at end of file
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Products/IProductAttribute.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Products/IProductAttribute.cs
index e743971e..f33cdccc 100644
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Products/IProductAttribute.cs
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Products/IProductAttribute.cs
@@ -1,13 +1,19 @@
-using Volo.Abp.Data;
+using System.Collections.Generic;
+using JetBrains.Annotations;
+using Volo.Abp.Data;
namespace EasyAbp.EShop.Products.Products
{
public interface IProductAttribute : IHasExtraProperties
{
+ [NotNull]
string DisplayName { get; }
-
+
+ [CanBeNull]
string Description { get; }
-
+
int DisplayOrder { get; }
+
+ IEnumerable ProductAttributeOptions { get; }
}
}
\ No newline at end of file
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Products/IProductAttributeOption.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Products/IProductAttributeOption.cs
index 4d943db9..ba8d5aa2 100644
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Products/IProductAttributeOption.cs
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Products/IProductAttributeOption.cs
@@ -1,13 +1,16 @@
-using Volo.Abp.Data;
+using JetBrains.Annotations;
+using Volo.Abp.Data;
namespace EasyAbp.EShop.Products.Products
{
public interface IProductAttributeOption : IHasExtraProperties
{
+ [NotNull]
string DisplayName { get; }
-
+
+ [CanBeNull]
string Description { get; }
-
+
int DisplayOrder { get; }
}
}
\ No newline at end of file
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Products/IProductBase.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Products/IProductBase.cs
new file mode 100644
index 00000000..2ab9b77d
--- /dev/null
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Products/IProductBase.cs
@@ -0,0 +1,35 @@
+using System;
+using EasyAbp.EShop.Stores.Stores;
+using JetBrains.Annotations;
+using Volo.Abp.Data;
+
+namespace EasyAbp.EShop.Products.Products
+{
+ public interface IProductBase : IHasExtraProperties, IMultiStore
+ {
+ string ProductGroupName { get; }
+
+ Guid? ProductDetailId { get; }
+
+ string UniqueName { get; }
+
+ string DisplayName { get; }
+
+ string Overview { get; }
+
+ InventoryStrategy InventoryStrategy { get; }
+
+ [CanBeNull]
+ string InventoryProviderName { get; }
+
+ string MediaResources { get; }
+
+ int DisplayOrder { get; }
+
+ bool IsPublished { get; }
+
+ bool IsStatic { get; }
+
+ bool IsHidden { get; }
+ }
+}
\ No newline at end of file
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Products/IProductSku.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Products/IProductSku.cs
index 920945c9..40d17f33 100644
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Products/IProductSku.cs
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Products/IProductSku.cs
@@ -1,26 +1,28 @@
using System;
+using JetBrains.Annotations;
using Volo.Abp.Data;
namespace EasyAbp.EShop.Products.Products
{
- public interface IProductSku : IHasExtraProperties
+ public interface IProductSku : IHasAttributeOptionIds, IHasExtraProperties
{
- string SerializedAttributeOptionIds { get; }
-
+ [CanBeNull]
string Name { get; }
-
+
+ [NotNull]
string Currency { get; }
-
+
decimal? OriginalPrice { get; }
-
+
decimal Price { get; }
int OrderMinQuantity { get; }
-
+
int OrderMaxQuantity { get; }
-
+
+ [CanBeNull]
string MediaResources { get; }
-
+
Guid? ProductDetailId { get; }
}
}
\ No newline at end of file
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Products/ProductAttributeEto.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Products/ProductAttributeEto.cs
index 9f8b15b9..171a1d2a 100644
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Products/ProductAttributeEto.cs
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Products/ProductAttributeEto.cs
@@ -10,11 +10,12 @@ namespace EasyAbp.EShop.Products.Products
public Guid Id { get; set; }
public string DisplayName { get; set; }
-
+
public string Description { get; set; }
-
+
public int DisplayOrder { get; set; }
-
+
+ IEnumerable IProductAttribute.ProductAttributeOptions => ProductAttributeOptions;
public List ProductAttributeOptions { get; set; }
}
}
\ No newline at end of file
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Products/ProductEto.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Products/ProductEto.cs
index eae729a4..19835352 100644
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Products/ProductEto.cs
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Products/ProductEto.cs
@@ -37,8 +37,10 @@ namespace EasyAbp.EShop.Products.Products
public bool IsHidden { get; set; }
+ IEnumerable IProduct.ProductAttributes => ProductAttributes;
public List ProductAttributes { get; set; }
+ IEnumerable IProduct.ProductSkus => ProductSkus;
public List ProductSkus { get; set; }
}
}
\ No newline at end of file
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Products/ProductSkuEto.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Products/ProductSkuEto.cs
index 09b047cc..60699fed 100644
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Products/ProductSkuEto.cs
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Products/ProductSkuEto.cs
@@ -1,4 +1,5 @@
using System;
+using System.Collections.Generic;
using Volo.Abp.Data;
using Volo.Abp.ObjectExtending;
@@ -8,7 +9,7 @@ namespace EasyAbp.EShop.Products.Products
{
public Guid Id { get; set; }
- public string SerializedAttributeOptionIds { get; set; }
+ public List AttributeOptionIds { get; set; }
public string Name { get; set; }
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/AttributeOptionIdsSerializer.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/AttributeOptionIdsSerializer.cs
deleted file mode 100644
index 22891048..00000000
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/AttributeOptionIdsSerializer.cs
+++ /dev/null
@@ -1,39 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-using Volo.Abp.DependencyInjection;
-using Volo.Abp.Json;
-
-namespace EasyAbp.EShop.Products.Products
-{
- public class AttributeOptionIdsSerializer : IAttributeOptionIdsSerializer, ITransientDependency
- {
- private readonly IJsonSerializer _jsonSerializer;
-
- public AttributeOptionIdsSerializer(IJsonSerializer jsonSerializer)
- {
- _jsonSerializer = jsonSerializer;
- }
-
- public async Task FormatAsync(string serializedAttributeOptionIds)
- {
- return await SerializeAsync(await DeserializeAsync(serializedAttributeOptionIds));
- }
-
- public Task SerializeAsync(IEnumerable attributeOptionIds)
- {
- if (attributeOptionIds == null)
- {
- return Task.FromResult(string.Empty);
- }
-
- return Task.FromResult(_jsonSerializer.Serialize(attributeOptionIds.OrderBy(x => x)));
- }
-
- public Task> DeserializeAsync(string serializedAttributeOptionIds)
- {
- return Task.FromResult(_jsonSerializer.Deserialize>(serializedAttributeOptionIds));
- }
- }
-}
\ No newline at end of file
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/IAttributeOptionIdsSerializer.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/IAttributeOptionIdsSerializer.cs
deleted file mode 100644
index 547128a3..00000000
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/IAttributeOptionIdsSerializer.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Threading.Tasks;
-
-namespace EasyAbp.EShop.Products.Products
-{
- public interface IAttributeOptionIdsSerializer
- {
- Task FormatAsync(string serializedAttributeOptionIds);
-
- Task SerializeAsync(IEnumerable attributeOptionIds);
-
- Task> DeserializeAsync(string serializedAttributeOptionIds);
- }
-}
\ No newline at end of file
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/Product.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/Product.cs
index b65b62cb..3fd415c9 100644
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/Product.cs
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/Product.cs
@@ -52,8 +52,10 @@ namespace EasyAbp.EShop.Products.Products
public virtual TimeSpan? PaymentExpireIn { get; protected set; }
+ IEnumerable IProduct.ProductAttributes => ProductAttributes;
public virtual List ProductAttributes { get; protected set; }
+ IEnumerable IProduct.ProductSkus => ProductSkus;
public virtual List ProductSkus { get; protected set; }
protected Product()
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/ProductAttribute.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/ProductAttribute.cs
index 79e2c249..791774f9 100644
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/ProductAttribute.cs
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/ProductAttribute.cs
@@ -9,16 +9,15 @@ namespace EasyAbp.EShop.Products.Products
{
public class ProductAttribute : FullAuditedEntity, IProductAttribute
{
- [NotNull]
public virtual string DisplayName { get; protected set; }
-
- [CanBeNull]
+
public virtual string Description { get; protected set; }
-
+
public virtual int DisplayOrder { get; protected set; }
-
+
public ExtraPropertyDictionary ExtraProperties { get; protected set; }
+ IEnumerable IProductAttribute.ProductAttributeOptions => ProductAttributeOptions;
public virtual List ProductAttributeOptions { get; protected set; }
protected ProductAttribute()
@@ -26,7 +25,7 @@ namespace EasyAbp.EShop.Products.Products
ExtraProperties = new ExtraPropertyDictionary();
this.SetDefaultsForExtraProperties(ProxyHelper.UnProxy(this).GetType());
}
-
+
public ProductAttribute(
Guid id,
[NotNull] string displayName,
@@ -38,7 +37,7 @@ namespace EasyAbp.EShop.Products.Products
DisplayOrder = displayOrder;
ProductAttributeOptions = new List();
-
+
ExtraProperties = new ExtraPropertyDictionary();
this.SetDefaultsForExtraProperties(ProxyHelper.UnProxy(this).GetType());
}
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/ProductAttributeOption.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/ProductAttributeOption.cs
index e355d986..41070e85 100644
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/ProductAttributeOption.cs
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/ProductAttributeOption.cs
@@ -8,12 +8,10 @@ namespace EasyAbp.EShop.Products.Products
{
public class ProductAttributeOption : FullAuditedEntity, IProductAttributeOption
{
- [NotNull]
public virtual string DisplayName { get; protected set; }
-
- [CanBeNull]
+
public virtual string Description { get; protected set; }
-
+
public virtual int DisplayOrder { get; protected set; }
public ExtraPropertyDictionary ExtraProperties { get; protected set; }
@@ -23,7 +21,7 @@ namespace EasyAbp.EShop.Products.Products
ExtraProperties = new ExtraPropertyDictionary();
this.SetDefaultsForExtraProperties(ProxyHelper.UnProxy(this).GetType());
}
-
+
public ProductAttributeOption(
Guid id,
[NotNull] string displayName,
@@ -33,7 +31,7 @@ namespace EasyAbp.EShop.Products.Products
DisplayName = displayName;
Description = description;
DisplayOrder = displayOrder;
-
+
ExtraProperties = new ExtraPropertyDictionary();
this.SetDefaultsForExtraProperties(ProxyHelper.UnProxy(this).GetType());
}
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/ProductManager.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/ProductManager.cs
index ade8db3d..4f3dbf36 100644
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/ProductManager.cs
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/ProductManager.cs
@@ -19,7 +19,6 @@ namespace EasyAbp.EShop.Products.Products
private readonly IProductDetailRepository _productDetailRepository;
private readonly IProductCategoryRepository _productCategoryRepository;
private readonly IProductInventoryProviderResolver _productInventoryProviderResolver;
- private readonly IAttributeOptionIdsSerializer _attributeOptionIdsSerializer;
private readonly IProductGroupConfigurationProvider _productGroupConfigurationProvider;
public ProductManager(
@@ -28,7 +27,6 @@ namespace EasyAbp.EShop.Products.Products
IProductDetailRepository productDetailRepository,
IProductCategoryRepository productCategoryRepository,
IProductInventoryProviderResolver productInventoryProviderResolver,
- IAttributeOptionIdsSerializer attributeOptionIdsSerializer,
IProductGroupConfigurationProvider productGroupConfigurationProvider)
{
_productRepository = productRepository;
@@ -36,7 +34,6 @@ namespace EasyAbp.EShop.Products.Products
_productDetailRepository = productDetailRepository;
_productCategoryRepository = productCategoryRepository;
_productInventoryProviderResolver = productInventoryProviderResolver;
- _attributeOptionIdsSerializer = attributeOptionIdsSerializer;
_productGroupConfigurationProvider = productGroupConfigurationProvider;
}
@@ -120,8 +117,6 @@ namespace EasyAbp.EShop.Products.Products
[UnitOfWork]
public virtual async Task CreateSkuAsync(Product product, ProductSku productSku)
{
- // productSku.SetSerializedAttributeOptionIds(await _attributeOptionIdsSerializer.FormatAsync(productSku.SerializedAttributeOptionIds));
-
await CheckSkuAttributeOptionsAsync(product, productSku);
await CheckProductSkuNameUniqueAsync(product, productSku);
@@ -151,25 +146,22 @@ namespace EasyAbp.EShop.Products.Products
return Task.CompletedTask;
}
- protected virtual async Task CheckSkuAttributeOptionsAsync(Product product, ProductSku productSku)
+ protected virtual Task CheckSkuAttributeOptionsAsync(Product product, ProductSku productSku)
{
- var attributeOptionIds =
- (await _attributeOptionIdsSerializer.DeserializeAsync(productSku.SerializedAttributeOptionIds))
- .ToList();
-
- if (!product.ProductAttributes.TrueForAll(attribute =>
- attribute.ProductAttributeOptions.Select(option => option.Id).Intersect(attributeOptionIds)
- .Count() == 1))
+ if (!product.ProductAttributes.TrueForAll(attribute => attribute.ProductAttributeOptions
+ .Select(option => option.Id).Intersect(productSku.AttributeOptionIds).Count() == 1))
{
throw new ProductSkuIncorrectAttributeOptionsException(product.Id,
- productSku.SerializedAttributeOptionIds);
+ productSku.AttributeOptionIds.JoinAsString(","));
}
- if (product.ProductSkus.Where(sku => sku.Id != productSku.Id).FirstOrDefault(sku =>
- sku.SerializedAttributeOptionIds.Equals(productSku.SerializedAttributeOptionIds)) != null)
+ if (product.ProductSkus.Where(sku => sku.Id != productSku.Id).Any(sku =>
+ sku.AttributeOptionIds.Order().SequenceEqual(productSku.AttributeOptionIds.Order())))
{
- throw new ProductSkuDuplicatedException(product.Id, productSku.SerializedAttributeOptionIds);
+ throw new ProductSkuDuplicatedException(product.Id, productSku.AttributeOptionIds.JoinAsString(","));
}
+
+ return Task.CompletedTask;
}
[UnitOfWork]
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/ProductSku.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/ProductSku.cs
index f1235626..f8910d78 100644
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/ProductSku.cs
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/ProductSku.cs
@@ -1,4 +1,5 @@
using System;
+using System.Collections.Generic;
using JetBrains.Annotations;
using NodaMoney;
using Volo.Abp;
@@ -10,13 +11,20 @@ namespace EasyAbp.EShop.Products.Products
{
public class ProductSku : FullAuditedEntity, IProductSku
{
- [NotNull]
- public virtual string SerializedAttributeOptionIds { get; protected set; }
+ private List _attributeOptionIds;
+
+ public virtual List AttributeOptionIds
+ {
+ get => _attributeOptionIds;
+ protected set
+ {
+ _attributeOptionIds = value;
+ _attributeOptionIds.Sort();
+ }
+ }
- [CanBeNull]
public virtual string Name { get; protected set; }
- [NotNull]
public virtual string Currency { get; protected set; }
public virtual decimal? OriginalPrice { get; protected set; }
@@ -29,7 +37,6 @@ namespace EasyAbp.EShop.Products.Products
public virtual TimeSpan? PaymentExpireIn { get; protected set; }
- [CanBeNull]
public virtual string MediaResources { get; protected set; }
public virtual Guid? ProductDetailId { get; protected set; }
@@ -44,7 +51,7 @@ namespace EasyAbp.EShop.Products.Products
public ProductSku(
Guid id,
- [NotNull] string serializedAttributeOptionIds,
+ List attributeOptionIds,
[CanBeNull] string name,
[NotNull] string currency,
decimal? originalPrice,
@@ -58,8 +65,8 @@ namespace EasyAbp.EShop.Products.Products
Check.NotNullOrWhiteSpace(currency, nameof(currency));
var nodaCurrency = NodaMoney.Currency.FromCode(currency);
- SerializedAttributeOptionIds =
- Check.NotNullOrWhiteSpace(serializedAttributeOptionIds, nameof(serializedAttributeOptionIds));
+ Check.NotNullOrEmpty(attributeOptionIds, nameof(attributeOptionIds));
+ AttributeOptionIds = attributeOptionIds;
Name = name?.Trim();
Currency = nodaCurrency.Code;
OriginalPrice = originalPrice.HasValue ? new Money(originalPrice.Value, nodaCurrency).Amount : null;
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/ProductView.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/ProductView.cs
index 66af8957..ffc3e020 100644
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/ProductView.cs
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/ProductView.cs
@@ -4,7 +4,7 @@ using Volo.Abp.MultiTenancy;
namespace EasyAbp.EShop.Products.Products
{
- public class ProductView : CreationAuditedAggregateRoot, IProduct, IMultiTenant
+ public class ProductView : CreationAuditedAggregateRoot, IProductBase, IMultiTenant
{
public virtual Guid? TenantId { get; protected set; }
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.EntityFrameworkCore/EasyAbp/EShop/Products/EntityFrameworkCore/AttributeOptionIds/AttributeOptionIdsValueComparer.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.EntityFrameworkCore/EasyAbp/EShop/Products/EntityFrameworkCore/AttributeOptionIds/AttributeOptionIdsValueComparer.cs
new file mode 100644
index 00000000..64aacd03
--- /dev/null
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.EntityFrameworkCore/EasyAbp/EShop/Products/EntityFrameworkCore/AttributeOptionIds/AttributeOptionIdsValueComparer.cs
@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Microsoft.EntityFrameworkCore.ChangeTracking;
+
+namespace EasyAbp.EShop.Products.EntityFrameworkCore.AttributeOptionIds;
+
+public class AttributeOptionIdsValueComparer : ValueComparer>
+{
+ public AttributeOptionIdsValueComparer()
+ : base(
+ (d1, d2) => d1.SequenceEqual(d2),
+ d => d.Aggregate(0, (k, v) => HashCode.Combine(k, v.GetHashCode())),
+ d => new List(d))
+ {
+ }
+}
\ No newline at end of file
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.EntityFrameworkCore/EasyAbp/EShop/Products/EntityFrameworkCore/AttributeOptionIds/AttributeOptionIdsValueConverter.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.EntityFrameworkCore/EasyAbp/EShop/Products/EntityFrameworkCore/AttributeOptionIds/AttributeOptionIdsValueConverter.cs
new file mode 100644
index 00000000..765b0869
--- /dev/null
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.EntityFrameworkCore/EasyAbp/EShop/Products/EntityFrameworkCore/AttributeOptionIds/AttributeOptionIdsValueConverter.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Text.Json;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+
+namespace EasyAbp.EShop.Products.EntityFrameworkCore.AttributeOptionIds;
+
+public class AttributeOptionIdsValueConverter : ValueConverter, string>
+{
+ public AttributeOptionIdsValueConverter() : base(
+ v => JsonSerializer.Serialize(v, (JsonSerializerOptions)null),
+ v => JsonSerializer.Deserialize>(v, (JsonSerializerOptions)null))
+ {
+ }
+}
\ No newline at end of file
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.EntityFrameworkCore/EasyAbp/EShop/Products/EntityFrameworkCore/EShopProductsEntityTypeBuilderExtensions.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.EntityFrameworkCore/EasyAbp/EShop/Products/EntityFrameworkCore/EShopProductsEntityTypeBuilderExtensions.cs
new file mode 100644
index 00000000..2f3dcf71
--- /dev/null
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.EntityFrameworkCore/EasyAbp/EShop/Products/EntityFrameworkCore/EShopProductsEntityTypeBuilderExtensions.cs
@@ -0,0 +1,20 @@
+using System;
+using EasyAbp.EShop.Products.EntityFrameworkCore.AttributeOptionIds;
+using EasyAbp.EShop.Products.Products;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Metadata.Builders;
+
+namespace EasyAbp.EShop.Products.EntityFrameworkCore;
+
+public static class EShopProductsEntityTypeBuilderExtensions
+{
+ public static void TryConfigureAttributeOptionIds(this EntityTypeBuilder b)
+ {
+ if (b.Metadata.ClrType.IsAssignableTo())
+ {
+ b.Property(nameof(IHasAttributeOptionIds.AttributeOptionIds))
+ .HasConversion()
+ .Metadata.SetValueComparer(new AttributeOptionIdsValueComparer());
+ }
+ }
+}
\ No newline at end of file
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.EntityFrameworkCore/EasyAbp/EShop/Products/EntityFrameworkCore/ProductsDbContextModelCreatingExtensions.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.EntityFrameworkCore/EasyAbp/EShop/Products/EntityFrameworkCore/ProductsDbContextModelCreatingExtensions.cs
index 2dfc08ff..58db971a 100644
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.EntityFrameworkCore/EasyAbp/EShop/Products/EntityFrameworkCore/ProductsDbContextModelCreatingExtensions.cs
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.EntityFrameworkCore/EasyAbp/EShop/Products/EntityFrameworkCore/ProductsDbContextModelCreatingExtensions.cs
@@ -81,6 +81,7 @@ namespace EasyAbp.EShop.Products.EntityFrameworkCore
{
b.ToTable(options.TablePrefix + "ProductSkus", options.Schema);
b.ConfigureByConvention();
+ b.TryConfigureAttributeOptionIds();
/* Configure more properties here */
b.Property(x => x.Price).HasColumnType("decimal(20,8)");
b.Property(x => x.OriginalPrice).HasColumnType("decimal(20,8)");
diff --git a/modules/EasyAbp.EShop.Products/test/EasyAbp.EShop.Products.Domain.Tests/Products/ProductDomainTests.cs b/modules/EasyAbp.EShop.Products/test/EasyAbp.EShop.Products.Domain.Tests/Products/ProductDomainTests.cs
index 958a17f6..dc4c526a 100644
--- a/modules/EasyAbp.EShop.Products/test/EasyAbp.EShop.Products.Domain.Tests/Products/ProductDomainTests.cs
+++ b/modules/EasyAbp.EShop.Products/test/EasyAbp.EShop.Products.Domain.Tests/Products/ProductDomainTests.cs
@@ -12,13 +12,11 @@ namespace EasyAbp.EShop.Products.Products
{
private IProductRepository ProductRepository { get; }
private IProductManager ProductManager { get; }
- private IAttributeOptionIdsSerializer AttributeOptionIdsSerializer { get; }
public ProductDomainTests()
{
ProductRepository = ServiceProvider.GetRequiredService();
ProductManager = ServiceProvider.GetRequiredService();
- AttributeOptionIdsSerializer = ServiceProvider.GetRequiredService();
}
[Fact]
@@ -129,7 +127,7 @@ namespace EasyAbp.EShop.Products.Products
{
var product1 = await ProductRepository.GetAsync(ProductsTestData.Product1Id);
- var attributeOptionIds = new[]
+ var attributeOptionIds = new List
{
ProductsTestData.Product1Attribute1Option4Id,
ProductsTestData.Product1Attribute2Option2Id
@@ -140,9 +138,8 @@ namespace EasyAbp.EShop.Products.Products
await ProductManager.CreateSkuAsync(product1, await CreateTestSkuAsync(attributeOptionIds));
});
- var serializedAttributeOptionIds = await AttributeOptionIdsSerializer.SerializeAsync(attributeOptionIds);
- product1.ProductSkus.Count(x => x.SerializedAttributeOptionIds == serializedAttributeOptionIds).ShouldBe(1);
+ product1.ProductSkus.Count(x => x.AttributeOptionIds.SequenceEqual(attributeOptionIds)).ShouldBe(1);
}
[Fact]
@@ -152,7 +149,7 @@ namespace EasyAbp.EShop.Products.Products
await Should.ThrowAsync(async () =>
{
- await ProductManager.CreateSkuAsync(product1, await CreateTestSkuAsync(new[]
+ await ProductManager.CreateSkuAsync(product1, await CreateTestSkuAsync(new List
{
ProductsTestData.Product1Attribute1Option1Id // need 2 options but input 1
}));
@@ -160,7 +157,7 @@ namespace EasyAbp.EShop.Products.Products
await Should.ThrowAsync(async () =>
{
- await ProductManager.CreateSkuAsync(product1, await CreateTestSkuAsync(new[]
+ await ProductManager.CreateSkuAsync(product1, await CreateTestSkuAsync(new List
{
ProductsTestData.Product1Attribute1Option1Id,
Guid.NewGuid() // a nonexistent option
@@ -169,7 +166,7 @@ namespace EasyAbp.EShop.Products.Products
await Should.ThrowAsync(async () =>
{
- await ProductManager.CreateSkuAsync(product1, await CreateTestSkuAsync(new[]
+ await ProductManager.CreateSkuAsync(product1, await CreateTestSkuAsync(new List
{
ProductsTestData.Product1Attribute1Option1Id,
ProductsTestData.Product1Attribute1Option2Id // 2 options from attribute1
@@ -186,7 +183,8 @@ namespace EasyAbp.EShop.Products.Products
await ProductManager.CreateAsync(product2);
- var fakeSku = new ProductSku(Guid.NewGuid(), "[]", null, "USD", null, 0m, 1, 1, null, null, null);
+ var fakeSku = new ProductSku(Guid.NewGuid(), new List { Guid.NewGuid() }, null, "USD", null, 0m, 1, 1,
+ null, null, null);
var inventoryDataModel = await ProductManager.GetInventoryDataAsync(product2, fakeSku);
@@ -194,9 +192,9 @@ namespace EasyAbp.EShop.Products.Products
inventoryDataModel.Inventory.ShouldBe(9998);
}
- private async Task CreateTestSkuAsync(IEnumerable attributeOptionIds)
+ private async Task CreateTestSkuAsync(List attributeOptionIds)
{
- return new ProductSku(Guid.NewGuid(), await AttributeOptionIdsSerializer.SerializeAsync(attributeOptionIds),
+ return new ProductSku(Guid.NewGuid(), attributeOptionIds,
"test-sku", "USD", null, 0m, 1, 10, null, null, null);
}
}
diff --git a/modules/EasyAbp.EShop.Products/test/EasyAbp.EShop.Products.TestBase/ProductsTestDataBuilder.cs b/modules/EasyAbp.EShop.Products/test/EasyAbp.EShop.Products.TestBase/ProductsTestDataBuilder.cs
index b7ca74f3..4176a335 100644
--- a/modules/EasyAbp.EShop.Products/test/EasyAbp.EShop.Products.TestBase/ProductsTestDataBuilder.cs
+++ b/modules/EasyAbp.EShop.Products/test/EasyAbp.EShop.Products.TestBase/ProductsTestDataBuilder.cs
@@ -1,4 +1,5 @@
using System;
+using System.Collections.Generic;
using System.Threading.Tasks;
using EasyAbp.EShop.Products.ProductDetails;
using EasyAbp.EShop.Products.Products;
@@ -13,18 +14,15 @@ namespace EasyAbp.EShop.Products
private readonly IProductManager _productManager;
private readonly IUnitOfWorkManager _unitOfWorkManager;
private readonly IProductDetailRepository _productDetailRepository;
- private readonly IAttributeOptionIdsSerializer _attributeOptionIdsSerializer;
public ProductsTestDataBuilder(
IProductManager productManager,
IUnitOfWorkManager unitOfWorkManager,
- IProductDetailRepository productDetailRepository,
- IAttributeOptionIdsSerializer attributeOptionIdsSerializer)
+ IProductDetailRepository productDetailRepository)
{
_productManager = productManager;
_unitOfWorkManager = unitOfWorkManager;
_productDetailRepository = productDetailRepository;
- _attributeOptionIdsSerializer = attributeOptionIdsSerializer;
}
public void Build()
@@ -71,18 +69,18 @@ namespace EasyAbp.EShop.Products
await _productManager.CreateAsync(product);
var productSku1 = new ProductSku(ProductsTestData.Product1Sku1Id,
- await _attributeOptionIdsSerializer.SerializeAsync(new[]
- { ProductsTestData.Product1Attribute1Option1Id, ProductsTestData.Product1Attribute2Option1Id }),
+ new List
+ { ProductsTestData.Product1Attribute1Option1Id, ProductsTestData.Product1Attribute2Option1Id },
null, "USD", null, 1m, 1, 10, null, null, null);
var productSku2 = new ProductSku(ProductsTestData.Product1Sku2Id,
- await _attributeOptionIdsSerializer.SerializeAsync(new[]
- { ProductsTestData.Product1Attribute1Option2Id, ProductsTestData.Product1Attribute2Option1Id }),
+ new List
+ { ProductsTestData.Product1Attribute1Option2Id, ProductsTestData.Product1Attribute2Option1Id },
null, "USD", null, 2m, 1, 10, null, null, null);
var productSku3 = new ProductSku(ProductsTestData.Product1Sku3Id,
- await _attributeOptionIdsSerializer.SerializeAsync(new[]
- { ProductsTestData.Product1Attribute1Option3Id, ProductsTestData.Product1Attribute2Option2Id }),
+ new List
+ { ProductsTestData.Product1Attribute1Option3Id, ProductsTestData.Product1Attribute2Option2Id },
null, "USD", null, 3m, 1, 10, null, null, null);
await _productManager.CreateSkuAsync(product, productSku1);
diff --git a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Application.Contracts/EasyAbp/EShop/Plugins/Coupons/CouponTemplates/Dtos/CouponTemplateDto.cs b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Application.Contracts/EasyAbp/EShop/Plugins/Coupons/CouponTemplates/Dtos/CouponTemplateDto.cs
index 61ca05c7..2ec26a93 100644
--- a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Application.Contracts/EasyAbp/EShop/Plugins/Coupons/CouponTemplates/Dtos/CouponTemplateDto.cs
+++ b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Application.Contracts/EasyAbp/EShop/Plugins/Coupons/CouponTemplates/Dtos/CouponTemplateDto.cs
@@ -31,6 +31,7 @@ namespace EasyAbp.EShop.Plugins.Coupons.CouponTemplates.Dtos
public bool IsUnscoped { get; set; }
+ IEnumerable ICouponTemplate.Scopes => Scopes;
public List Scopes { get; set; }
}
}
\ No newline at end of file
diff --git a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateData.cs b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateData.cs
index 5f60b666..c9e535b9 100644
--- a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateData.cs
+++ b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateData.cs
@@ -6,9 +6,9 @@ namespace EasyAbp.EShop.Plugins.Coupons.CouponTemplates
public class CouponTemplateData : ICouponTemplate, IHasCouponTemplateScopes
{
public Guid Id { get; set; }
-
+
public Guid? TenantId { get; set; }
-
+
public Guid? StoreId { get; set; }
public CouponType CouponType { get; set; }
@@ -28,11 +28,12 @@ namespace EasyAbp.EShop.Plugins.Coupons.CouponTemplates
public decimal ConditionAmount { get; set; }
public decimal DiscountAmount { get; set; }
-
+
public string Currency { get; set; }
public bool IsUnscoped { get; set; }
+ IEnumerable ICouponTemplate.Scopes => Scopes;
public List Scopes { get; set; }
}
}
\ No newline at end of file
diff --git a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/CouponTemplates/ICouponTemplate.cs b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/CouponTemplates/ICouponTemplate.cs
index 43a08250..a5770ab8 100644
--- a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/CouponTemplates/ICouponTemplate.cs
+++ b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/CouponTemplates/ICouponTemplate.cs
@@ -12,26 +12,28 @@ namespace EasyAbp.EShop.Plugins.Coupons.CouponTemplates
[CanBeNull]
string UniqueName { get; }
-
+
[NotNull]
string DisplayName { get; }
-
+
[CanBeNull]
string Description { get; }
-
+
TimeSpan? UsableDuration { get; }
-
+
DateTime? UsableBeginTime { get; }
-
+
DateTime? UsableEndTime { get; }
-
+
decimal ConditionAmount { get; }
-
+
decimal DiscountAmount { get; }
-
+
[NotNull]
string Currency { get; }
-
+
bool IsUnscoped { get; }
+
+ IEnumerable Scopes { get; }
}
}
\ No newline at end of file
diff --git a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain/EasyAbp/EShop/Plugins/Coupons/CouponTemplates/CouponTemplate.cs b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain/EasyAbp/EShop/Plugins/Coupons/CouponTemplates/CouponTemplate.cs
index f0c3258c..f56374ad 100644
--- a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain/EasyAbp/EShop/Plugins/Coupons/CouponTemplates/CouponTemplate.cs
+++ b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain/EasyAbp/EShop/Plugins/Coupons/CouponTemplates/CouponTemplate.cs
@@ -7,10 +7,11 @@ using Volo.Abp.Timing;
namespace EasyAbp.EShop.Plugins.Coupons.CouponTemplates
{
- public class CouponTemplate : FullAuditedAggregateRoot, ICouponTemplate, IHasCouponTemplateScopes, IMultiTenant
+ public class CouponTemplate : FullAuditedAggregateRoot, ICouponTemplate,
+ IHasCouponTemplateScopes, IMultiTenant
{
public virtual Guid? TenantId { get; protected set; }
-
+
///
/// If it is set to null, only cross-store admin users can manage this template.
/// It is not about the coupon usage scope, but the StoreId property of Scopes should be same as it if it not null.
@@ -21,36 +22,37 @@ namespace EasyAbp.EShop.Plugins.Coupons.CouponTemplates
[CanBeNull]
public virtual string UniqueName { get; protected set; }
-
+
[NotNull]
public virtual string DisplayName { get; protected set; }
-
+
[CanBeNull]
public virtual string Description { get; protected set; }
-
+
///
/// If both the UsableDuration and the UsableEndTime have values, the earlier time is preferred.
///
public virtual TimeSpan? UsableDuration { get; protected set; }
-
+
public virtual DateTime? UsableBeginTime { get; protected set; }
-
+
///
/// If both the UsableDuration and the UsableEndTime have values, the earlier time is preferred.
///
public virtual DateTime? UsableEndTime { get; protected set; }
-
+
public virtual decimal ConditionAmount { get; protected set; }
-
+
public virtual decimal DiscountAmount { get; protected set; }
-
+
public virtual string Currency { get; protected set; }
///
/// The coupon can be used for any product of any store if this property is set to true.
///
public virtual bool IsUnscoped { get; protected set; }
-
+
+ IEnumerable ICouponTemplate.Scopes => Scopes;
public virtual List Scopes { get; protected set; }
protected CouponTemplate()
@@ -59,20 +61,20 @@ namespace EasyAbp.EShop.Plugins.Coupons.CouponTemplates
}
public CouponTemplate(
- Guid id,
- Guid? tenantId,
- Guid? storeId,
- CouponType couponType,
- string uniqueName,
- string displayName,
- string description,
- TimeSpan? usableDuration,
- DateTime? usableBeginTime,
- DateTime? usableEndTime,
- decimal conditionAmount,
+ Guid id,
+ Guid? tenantId,
+ Guid? storeId,
+ CouponType couponType,
+ string uniqueName,
+ string displayName,
+ string description,
+ TimeSpan? usableDuration,
+ DateTime? usableBeginTime,
+ DateTime? usableEndTime,
+ decimal conditionAmount,
decimal discountAmount,
[NotNull] string currency,
- bool isUnscoped,
+ bool isUnscoped,
List scopes
) : base(id)
{
@@ -109,4 +111,4 @@ namespace EasyAbp.EShop.Plugins.Coupons.CouponTemplates
return expirationTime;
}
}
-}
+}
\ No newline at end of file
diff --git a/samples/EShopSample/aspnet-core/src/EShopSample.Domain/Data/SampleDataSeedContributor.cs b/samples/EShopSample/aspnet-core/src/EShopSample.Domain/Data/SampleDataSeedContributor.cs
index b9c15ac7..d92144c5 100644
--- a/samples/EShopSample/aspnet-core/src/EShopSample.Domain/Data/SampleDataSeedContributor.cs
+++ b/samples/EShopSample/aspnet-core/src/EShopSample.Domain/Data/SampleDataSeedContributor.cs
@@ -1,4 +1,5 @@
using System;
+using System.Collections.Generic;
using System.Threading.Tasks;
using EasyAbp.EShop.Products;
using EasyAbp.EShop.Products.Categories;
@@ -27,7 +28,6 @@ public class SampleDataSeedContributor : IDataSeedContributor, ITransientDepende
private readonly ICategoryRepository _categoryRepository;
private readonly IProductCategoryRepository _productCategoryRepository;
private readonly ISettingProvider _settingProvider;
- private readonly IAttributeOptionIdsSerializer _attributeOptionIdsSerializer;
public SampleDataSeedContributor(
IGuidGenerator guidGenerator,
@@ -38,8 +38,7 @@ public class SampleDataSeedContributor : IDataSeedContributor, ITransientDepende
ICategoryManager categoryManager,
ICategoryRepository categoryRepository,
IProductCategoryRepository productCategoryRepository,
- ISettingProvider settingProvider,
- IAttributeOptionIdsSerializer attributeOptionIdsSerializer)
+ ISettingProvider settingProvider)
{
_guidGenerator = guidGenerator;
_currentTenant = currentTenant;
@@ -50,7 +49,6 @@ public class SampleDataSeedContributor : IDataSeedContributor, ITransientDepende
_categoryRepository = categoryRepository;
_productCategoryRepository = productCategoryRepository;
_settingProvider = settingProvider;
- _attributeOptionIdsSerializer = attributeOptionIdsSerializer;
}
[UnitOfWork(true)]
@@ -155,23 +153,23 @@ public class SampleDataSeedContributor : IDataSeedContributor, ITransientDepende
await _productManager.CreateAsync(product);
var productSku1 = new ProductSku(_guidGenerator.Create(),
- await _attributeOptionIdsSerializer.SerializeAsync(new[]
- { attribute1.ProductAttributeOptions[0].Id, attribute2.ProductAttributeOptions[0].Id }),
+ new List
+ { attribute1.ProductAttributeOptions[0].Id, attribute2.ProductAttributeOptions[0].Id },
null, "USD", null, 1m, 1, 10, null, null, null);
var productSku2 = new ProductSku(_guidGenerator.Create(),
- await _attributeOptionIdsSerializer.SerializeAsync(new[]
- { attribute1.ProductAttributeOptions[1].Id, attribute2.ProductAttributeOptions[0].Id }),
+ new List
+ { attribute1.ProductAttributeOptions[1].Id, attribute2.ProductAttributeOptions[0].Id },
null, "USD", null, 2m, 1, 10, null, null, null);
var productSku3 = new ProductSku(_guidGenerator.Create(),
- await _attributeOptionIdsSerializer.SerializeAsync(new[]
- { attribute1.ProductAttributeOptions[1].Id, attribute2.ProductAttributeOptions[1].Id }),
+ new List
+ { attribute1.ProductAttributeOptions[1].Id, attribute2.ProductAttributeOptions[1].Id },
null, "USD", null, 3m, 1, 10, null, null, null);
var productSku4 = new ProductSku(_guidGenerator.Create(),
- await _attributeOptionIdsSerializer.SerializeAsync(new[]
- { attribute1.ProductAttributeOptions[2].Id, attribute2.ProductAttributeOptions[1].Id }),
+ new List
+ { attribute1.ProductAttributeOptions[2].Id, attribute2.ProductAttributeOptions[1].Id },
null, "USD", null, 4m, 1, 10, null, null, null);
await _productManager.CreateSkuAsync(product, productSku1);
diff --git a/samples/EShopSample/aspnet-core/src/EShopSample.EntityFrameworkCore/Migrations/20230328174008_RenamedToAttributeOptionIds.Designer.cs b/samples/EShopSample/aspnet-core/src/EShopSample.EntityFrameworkCore/Migrations/20230328174008_RenamedToAttributeOptionIds.Designer.cs
new file mode 100644
index 00000000..0d92be3a
--- /dev/null
+++ b/samples/EShopSample/aspnet-core/src/EShopSample.EntityFrameworkCore/Migrations/20230328174008_RenamedToAttributeOptionIds.Designer.cs
@@ -0,0 +1,6361 @@
+//
+using System;
+using EShopSample.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Metadata;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using Volo.Abp.EntityFrameworkCore;
+
+#nullable disable
+
+namespace EShopSample.Migrations
+{
+ [DbContext(typeof(EShopSampleDbContext))]
+ [Migration("20230328174008_RenamedToAttributeOptionIds")]
+ partial class RenamedToAttributeOptionIds
+ {
+ ///
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer)
+ .HasAnnotation("ProductVersion", "7.0.1")
+ .HasAnnotation("Relational:MaxIdentifierLength", 128);
+
+ SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
+
+ modelBuilder.Entity("EasyAbp.BookingService.AssetCategories.AssetCategory", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("AssetDefinitionName")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Code")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasMaxLength(40)
+ .HasColumnType("nvarchar(40)")
+ .HasColumnName("ConcurrencyStamp");
+
+ b.Property("CreationTime")
+ .HasColumnType("datetime2")
+ .HasColumnName("CreationTime");
+
+ b.Property("CreatorId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("CreatorId");
+
+ b.Property("DefaultPeriodUsable")
+ .HasColumnType("int");
+
+ b.Property("DeleterId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("DeleterId");
+
+ b.Property("DeletionTime")
+ .HasColumnType("datetime2")
+ .HasColumnName("DeletionTime");
+
+ b.Property("Disabled")
+ .HasColumnType("bit");
+
+ b.Property("DisplayName")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ExtraProperties")
+ .HasColumnType("nvarchar(max)")
+ .HasColumnName("ExtraProperties");
+
+ b.Property("IsDeleted")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("bit")
+ .HasDefaultValue(false)
+ .HasColumnName("IsDeleted");
+
+ b.Property("LastModificationTime")
+ .HasColumnType("datetime2")
+ .HasColumnName("LastModificationTime");
+
+ b.Property("LastModifierId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("LastModifierId");
+
+ b.Property("Level")
+ .HasColumnType("int");
+
+ b.Property("ParentId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("PeriodSchemeId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("TenantId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("TenantId");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ParentId");
+
+ b.ToTable("EasyAbpBookingServiceAssetCategories", (string)null);
+ });
+
+ modelBuilder.Entity("EasyAbp.BookingService.AssetOccupancies.AssetOccupancy", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("Asset")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("AssetDefinitionName")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("AssetId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasMaxLength(40)
+ .HasColumnType("nvarchar(40)")
+ .HasColumnName("ConcurrencyStamp");
+
+ b.Property("CreationTime")
+ .HasColumnType("datetime2")
+ .HasColumnName("CreationTime");
+
+ b.Property("CreatorId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("CreatorId");
+
+ b.Property("Date")
+ .HasColumnType("datetime2");
+
+ b.Property("Duration")
+ .HasColumnType("time");
+
+ b.Property("ExtraProperties")
+ .HasColumnType("nvarchar(max)")
+ .HasColumnName("ExtraProperties");
+
+ b.Property("OccupierName")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("OccupierUserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("StartingTime")
+ .HasColumnType("time");
+
+ b.Property("TenantId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("TenantId");
+
+ b.Property("Volume")
+ .HasColumnType("int");
+
+ b.HasKey("Id");
+
+ b.HasIndex("Date", "OccupierUserId");
+
+ b.HasIndex("Date", "AssetId", "StartingTime", "Duration");
+
+ b.ToTable("EasyAbpBookingServiceAssetOccupancies", (string)null);
+ });
+
+ modelBuilder.Entity("EasyAbp.BookingService.AssetOccupancyCounts.AssetOccupancyCount", b =>
+ {
+ b.Property("Date")
+ .HasColumnType("datetime2");
+
+ b.Property("AssetId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("StartingTime")
+ .HasColumnType("time");
+
+ b.Property("Duration")
+ .HasColumnType("time");
+
+ b.Property("Asset")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasMaxLength(40)
+ .HasColumnType("nvarchar(40)")
+ .HasColumnName("ConcurrencyStamp");
+
+ b.Property("ExtraProperties")
+ .HasColumnType("nvarchar(max)")
+ .HasColumnName("ExtraProperties");
+
+ b.Property("TenantId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("TenantId");
+
+ b.Property("Volume")
+ .HasColumnType("int");
+
+ b.HasKey("Date", "AssetId", "StartingTime", "Duration");
+
+ b.ToTable("EasyAbpBookingServiceAssetOccupancyCounts", (string)null);
+ });
+
+ modelBuilder.Entity("EasyAbp.BookingService.AssetPeriodSchemes.AssetPeriodScheme", b =>
+ {
+ b.Property("Date")
+ .HasColumnType("datetime2");
+
+ b.Property("AssetId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasMaxLength(40)
+ .HasColumnType("nvarchar(40)")
+ .HasColumnName("ConcurrencyStamp");
+
+ b.Property("CreationTime")
+ .HasColumnType("datetime2")
+ .HasColumnName("CreationTime");
+
+ b.Property("CreatorId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("CreatorId");
+
+ b.Property("ExtraProperties")
+ .HasColumnType("nvarchar(max)")
+ .HasColumnName("ExtraProperties");
+
+ b.Property("LastModificationTime")
+ .HasColumnType("datetime2")
+ .HasColumnName("LastModificationTime");
+
+ b.Property("LastModifierId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("LastModifierId");
+
+ b.Property("PeriodSchemeId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("TenantId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("TenantId");
+
+ b.HasKey("Date", "AssetId");
+
+ b.ToTable("EasyAbpBookingServiceAssetPeriodSchemes", (string)null);
+ });
+
+ modelBuilder.Entity("EasyAbp.BookingService.AssetSchedules.AssetSchedule", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("AssetId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasMaxLength(40)
+ .HasColumnType("nvarchar(40)")
+ .HasColumnName("ConcurrencyStamp");
+
+ b.Property("CreationTime")
+ .HasColumnType("datetime2")
+ .HasColumnName("CreationTime");
+
+ b.Property("CreatorId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("CreatorId");
+
+ b.Property("Date")
+ .HasColumnType("datetime2");
+
+ b.Property("DeleterId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("DeleterId");
+
+ b.Property("DeletionTime")
+ .HasColumnType("datetime2")
+ .HasColumnName("DeletionTime");
+
+ b.Property("ExtraProperties")
+ .HasColumnType("nvarchar(max)")
+ .HasColumnName("ExtraProperties");
+
+ b.Property("IsDeleted")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("bit")
+ .HasDefaultValue(false)
+ .HasColumnName("IsDeleted");
+
+ b.Property("LastModificationTime")
+ .HasColumnType("datetime2")
+ .HasColumnName("LastModificationTime");
+
+ b.Property("LastModifierId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("LastModifierId");
+
+ b.Property("PeriodId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("PeriodSchemeId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("PeriodUsable")
+ .HasColumnType("int");
+
+ b.Property("TenantId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("TenantId");
+
+ b.HasKey("Id");
+
+ b.HasIndex("Date", "AssetId", "PeriodSchemeId");
+
+ b.ToTable("EasyAbpBookingServiceAssetSchedules", (string)null);
+ });
+
+ modelBuilder.Entity("EasyAbp.BookingService.Assets.Asset", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("AssetCategoryId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("AssetDefinitionName")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasMaxLength(40)
+ .HasColumnType("nvarchar(40)")
+ .HasColumnName("ConcurrencyStamp");
+
+ b.Property("CreationTime")
+ .HasColumnType("datetime2")
+ .HasColumnName("CreationTime");
+
+ b.Property("CreatorId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("CreatorId");
+
+ b.Property("DefaultPeriodUsable")
+ .HasColumnType("int");
+
+ b.Property("DeleterId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("DeleterId");
+
+ b.Property("DeletionTime")
+ .HasColumnType("datetime2")
+ .HasColumnName("DeletionTime");
+
+ b.Property("Disabled")
+ .HasColumnType("bit");
+
+ b.Property("ExtraProperties")
+ .HasColumnType("nvarchar(max)")
+ .HasColumnName("ExtraProperties");
+
+ b.Property("IsDeleted")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("bit")
+ .HasDefaultValue(false)
+ .HasColumnName("IsDeleted");
+
+ b.Property("LastModificationTime")
+ .HasColumnType("datetime2")
+ .HasColumnName("LastModificationTime");
+
+ b.Property("LastModifierId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("LastModifierId");
+
+ b.Property("Name")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("PeriodSchemeId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("Priority")
+ .HasColumnType("int");
+
+ b.Property("TenantId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("TenantId");
+
+ b.Property("Volume")
+ .HasColumnType("int");
+
+ b.HasKey("Id");
+
+ b.ToTable("EasyAbpBookingServiceAssets", (string)null);
+ });
+
+ modelBuilder.Entity("EasyAbp.BookingService.PeriodSchemes.Period", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("Duration")
+ .HasColumnType("time");
+
+ b.Property("PeriodSchemeId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("StartingTime")
+ .HasColumnType("time");
+
+ b.HasKey("Id");
+
+ b.HasIndex("PeriodSchemeId");
+
+ b.ToTable("EasyAbpBookingServicePeriods", (string)null);
+ });
+
+ modelBuilder.Entity("EasyAbp.BookingService.PeriodSchemes.PeriodScheme", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasMaxLength(40)
+ .HasColumnType("nvarchar(40)")
+ .HasColumnName("ConcurrencyStamp");
+
+ b.Property("CreationTime")
+ .HasColumnType("datetime2")
+ .HasColumnName("CreationTime");
+
+ b.Property("CreatorId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("CreatorId");
+
+ b.Property("DeleterId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("DeleterId");
+
+ b.Property("DeletionTime")
+ .HasColumnType("datetime2")
+ .HasColumnName("DeletionTime");
+
+ b.Property("ExtraProperties")
+ .HasColumnType("nvarchar(max)")
+ .HasColumnName("ExtraProperties");
+
+ b.Property("IsDefault")
+ .HasColumnType("bit");
+
+ b.Property("IsDeleted")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("bit")
+ .HasDefaultValue(false)
+ .HasColumnName("IsDeleted");
+
+ b.Property("LastModificationTime")
+ .HasColumnType("datetime2")
+ .HasColumnName("LastModificationTime");
+
+ b.Property("LastModifierId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("LastModifierId");
+
+ b.Property("Name")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("TenantId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("TenantId");
+
+ b.HasKey("Id");
+
+ b.ToTable("EasyAbpBookingServicePeriodSchemes", (string)null);
+ });
+
+ modelBuilder.Entity("EasyAbp.EShop.Orders.Orders.Order", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ActualTotalPrice")
+ .HasColumnType("decimal(20,8)");
+
+ b.Property("CanceledTime")
+ .HasColumnType("datetime2");
+
+ b.Property("CancellationReason")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("CompletionTime")
+ .HasColumnType("datetime2");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasMaxLength(40)
+ .HasColumnType("nvarchar(40)")
+ .HasColumnName("ConcurrencyStamp");
+
+ b.Property("CreationTime")
+ .HasColumnType("datetime2")
+ .HasColumnName("CreationTime");
+
+ b.Property