From 9b9e5e8d0834191314b9cbb0f08e21d0c4ad6aec Mon Sep 17 00:00:00 2001 From: gdlcf88 Date: Wed, 23 Sep 2020 18:14:11 +0800 Subject: [PATCH] Complete coupon entities design. --- .../Coupons/CouponTemplates/CouponType.cs | 24 ++++++++++ ...asyAbp.EShop.Plugins.Coupons.Domain.csproj | 1 + .../Coupons/CouponTemplates/CouponTemplate.cs | 48 +++++++++++++++++++ .../CouponTemplates/CouponTemplateProduct.cs | 9 ---- .../CouponTemplates/CouponTemplateScope.cs | 21 ++++++++ .../EShop/Plugins/Coupons/Coupons/Coupon.cs | 14 ++++++ .../EShopPluginsCouponsDomainModule.cs | 6 ++- 7 files changed, 112 insertions(+), 11 deletions(-) create mode 100644 plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/CouponTemplates/CouponType.cs delete mode 100644 plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain/EasyAbp/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateProduct.cs create mode 100644 plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain/EasyAbp/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope.cs diff --git a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/CouponTemplates/CouponType.cs b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/CouponTemplates/CouponType.cs new file mode 100644 index 00000000..f40574d2 --- /dev/null +++ b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain.Shared/EasyAbp/EShop/Plugins/Coupons/CouponTemplates/CouponType.cs @@ -0,0 +1,24 @@ +namespace EasyAbp.EShop.Plugins.Coupons.CouponTemplates +{ + public enum CouponType + { + /// + /// Discount once if the condition is met. + /// e.g. arrange ConditionAmount = 300 and DiscountAmount = 20. + /// If the price of a product is 300, the actual order price will be discounted by 20. + /// + Normal = 1, + + /// + /// Discount every time the condition is met. + /// e.g. arrange ConditionAmount = 300 and DiscountAmount = 20. + /// If the price of a product is 300, the actual order price will be discounted by 60. + /// + PerMeet = 2, + + /// + /// A type of coupon with custom usage rules. + /// + Custom = 4 + } +} \ No newline at end of file diff --git a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain/EasyAbp.EShop.Plugins.Coupons.Domain.csproj b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain/EasyAbp.EShop.Plugins.Coupons.Domain.csproj index 66970ceb..c0a4f854 100644 --- a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain/EasyAbp.EShop.Plugins.Coupons.Domain.csproj +++ b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain/EasyAbp.EShop.Plugins.Coupons.Domain.csproj @@ -9,6 +9,7 @@ + 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 ace46a19..3a891443 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 @@ -1,4 +1,6 @@ using System; +using System.Collections.Generic; +using JetBrains.Annotations; using Volo.Abp.Domain.Entities.Auditing; using Volo.Abp.MultiTenancy; @@ -7,5 +9,51 @@ namespace EasyAbp.EShop.Plugins.Coupons.CouponTemplates public class CouponTemplate : FullAuditedAggregateRoot, 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. + /// + public virtual Guid? StoreId { get; protected set; } + + public virtual CouponType CouponType { get; protected set; } + + [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; } + + /// + /// If it is set to true, the coupon can be used when the total price of all the order lines in the order + /// with products in scope is greater than or equal to ConditionAmount. + /// + public virtual bool IsCrossProductAllowed { 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; } + + public virtual List Scopes { get; protected set; } } } \ No newline at end of file diff --git a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain/EasyAbp/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateProduct.cs b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain/EasyAbp/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateProduct.cs deleted file mode 100644 index 7e9270a6..00000000 --- a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain/EasyAbp/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateProduct.cs +++ /dev/null @@ -1,9 +0,0 @@ -using System; -using Volo.Abp.Domain.Entities.Auditing; - -namespace EasyAbp.EShop.Plugins.Coupons.CouponTemplates -{ - public class CouponTemplateProduct : FullAuditedEntity - { - } -} \ No newline at end of file diff --git a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain/EasyAbp/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope.cs b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain/EasyAbp/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope.cs new file mode 100644 index 00000000..43762e39 --- /dev/null +++ b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain/EasyAbp/EShop/Plugins/Coupons/CouponTemplates/CouponTemplateScope.cs @@ -0,0 +1,21 @@ +using System; +using EasyAbp.EShop.Stores.Stores; +using Volo.Abp.Domain.Entities.Auditing; + +namespace EasyAbp.EShop.Plugins.Coupons.CouponTemplates +{ + public class CouponTemplateScope : FullAuditedEntity, IMultiStore + { + public virtual Guid StoreId { get; protected set; } + + /// + /// If this property is set to null, the coupon can be used for all products in the store. + /// + public virtual Guid? ProductId { get; protected set; } + + /// + /// If this property is set to null, the coupon can be used for all SKUs in the product. + /// + public virtual Guid? ProductSkuId { get; protected set; } + } +} \ No newline at end of file diff --git a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain/EasyAbp/EShop/Plugins/Coupons/Coupons/Coupon.cs b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain/EasyAbp/EShop/Plugins/Coupons/Coupons/Coupon.cs index f3135161..8d89a085 100644 --- a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain/EasyAbp/EShop/Plugins/Coupons/Coupons/Coupon.cs +++ b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain/EasyAbp/EShop/Plugins/Coupons/Coupons/Coupon.cs @@ -7,5 +7,19 @@ namespace EasyAbp.EShop.Plugins.Coupons.Coupons public class Coupon : FullAuditedAggregateRoot, IMultiTenant { public virtual Guid? TenantId { get; protected set; } + + public virtual Guid CouponTemplateId { get; protected set; } + + public virtual Guid UserId { get; protected set; } + + public virtual Guid? OrderId { get; protected set; } + + public virtual DateTime? UsableBeginTime { get; protected set; } + + public virtual DateTime? UsableEndTime { get; protected set; } + + public virtual DateTime? UsedTime { get; protected set; } + + public virtual decimal? DiscountedAmount { get; protected set; } } } \ No newline at end of file diff --git a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain/EasyAbp/EShop/Plugins/Coupons/EShopPluginsCouponsDomainModule.cs b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain/EasyAbp/EShop/Plugins/Coupons/EShopPluginsCouponsDomainModule.cs index cfae6728..c0532d91 100644 --- a/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain/EasyAbp/EShop/Plugins/Coupons/EShopPluginsCouponsDomainModule.cs +++ b/plugins/Coupons/src/EasyAbp.EShop.Plugins.Coupons.Domain/EasyAbp/EShop/Plugins/Coupons/EShopPluginsCouponsDomainModule.cs @@ -1,11 +1,13 @@ -using Volo.Abp.Domain; +using EasyAbp.EShop.Stores; +using Volo.Abp.Domain; using Volo.Abp.Modularity; namespace EasyAbp.EShop.Plugins.Coupons { [DependsOn( typeof(AbpDddDomainModule), - typeof(EShopPluginsCouponsDomainSharedModule) + typeof(EShopPluginsCouponsDomainSharedModule), + typeof(EShopStoresDomainSharedModule) )] public class EShopPluginsCouponsDomainModule : AbpModule {