using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
namespace CouponsMg.Coupons
{
public enum Period
{
/// <summary>
/// 1小时
/// </summary>
[Description("1小时")]
OneHour = 1,
/// <summary>
/// 2小时
/// </summary>
[Description("2小时")]
TwoHours = 2,
/// <summary>
/// 3小时
/// </summary>
[Description("3小时")]
ThreeHours = 3,
/// <summary>
/// 4小时
/// </summary>
[Description("4小时")]
FourHours = 4,
/// <summary>
///5小时
/// </summary>
[Description("5小时")]
FiveHours = 5,
/// <summary>
/// 6小时
/// </summary>
[Description("6小时")]
SixHours = 6,
/// <summary>
/// 8小时
/// </summary>
[Description("8小时")]
EightHours = 8,
/// <summary>
/// 9小时
/// </summary>
[Description("9小时")]
TenHours = 9,
/// <summary>
/// 12小时
/// </summary>
[Description("12小时")]
TwelveHours = 12,
/// <summary>
/// 1天
/// </summary>
[Description("1天")]
OneDay = 24,
/// <summary>
/// 2天
/// </summary>
[Description("2天")]
TwoDays = OneDay * 2,
/// <summary>
///3天
/// </summary>
[Description("3天")]
ThreeDays = OneDay * 3,
/// <summary>
/// 5天
/// </summary>
[Description("5天")]
FiveDays = OneDay * 5,
/// <summary>
/// 7天
/// </summary>
[Description("7天")]
SevenDays = OneDay * 7,
/// <summary>
/// 14天
/// </summary>
[Description("14天")]
FourteenDays = OneDay * 14,
/// <summary>
/// 1个月
/// </summary>
[Description("1个月")]
OneMonth = OneDay * 30,
/// <summary>
/// 3个月
/// </summary>
[Description("3个月")]
ThreeMonths = OneMonth *3,
/// <summary>
/// 6个月
/// </summary>
[Description("6个月")]
SixMounths = OneMonth *6,
/// <summary>
/// 1年
/// </summary>
[Description("1年")]
OneYear = OneMonth *12,
}
public abstract class CouponsBaseModel : INotifyPropertyChanged
{
#region Property Changed
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
#endregion
#region 属性
#region 领取时间段
/// <summary>
/// 可领取优惠券期限范围类型。默认为7天
/// </summary>
public Period CanPickupPeriodType { get; set; } = Period.SevenDays;
private DateTime canPickUpStartTime = DateTime.Now;
/// <summary>
/// 优惠券可领取开始日期 默认为 当前日期
/// </summary>
public DateTime CanPickUpStartTime
{
get { return canPickUpStartTime; }
set
{
if (value == null)
{
return;
}
canPickUpStartTime = value;
CanPickUpEndTime = canPickUpStartTime.AddHours((int)CanPickupPeriodType);
OnPropertyChanged(nameof(CanPickUpStartTime));
}
}
private DateTime canPickUpEndTime = DateTime.Now.AddDays(7);
/// <summary>
/// 优惠券可领取的截止日期 默认为当前日期后7天
/// </summary>
public DateTime CanPickUpEndTime
{
get { return canPickUpEndTime; }
set
{
if (value == null)
{
return;
}
if (CanPickUpStartTime > value)
{
throw new ArgumentOutOfRangeException("优惠券可领取开始日期不能大于截止日期");
}
canPickUpEndTime = value;
OnPropertyChanged(nameof(CanPickUpEndTime));
}
}
#endregion
#region 有效期时间段
/// <summary>
/// 优惠券有效期时间段类型,默认为7天
/// </summary>
public Period EffectivePeriodType { get; set; } = Period.SevenDays;
private DateTime effectiveDate = DateTime.Now;
/// <summary>
/// 优惠券生效日期. 默认为当前日期
/// </summary>
public DateTime EffectiveDate
{
get { return effectiveDate; }
set
{
if (value == null)
{
return;
}
effectiveDate = value;
ExpireDate = effectiveDate.AddHours((int)EffectivePeriodType);
OnPropertyChanged(nameof(EffectiveDate));
}
}
private DateTime expireDate = DateTime.Now.AddDays(7);
/// <summary>
/// 优惠券失效日期 默认为当前日期后7天
/// </summary>
public DateTime ExpireDate
{
get { return expireDate; }
set
{
if (value == null)
{
return;
}
if (effectiveDate > expireDate)
{
throw new ArgumentOutOfRangeException("优惠券生效日期不能大于失效日期");
}
expireDate = value;
OnPropertyChanged(nameof(ExpireDate));
}
}
#endregion
private double thresholdAmount = 0;
/// <summary>
/// 优惠券使用门槛。<=0 为无门槛. 默认为无门槛
/// </summary>
public double ThresholdAmount
{
get { return thresholdAmount; }
set
{
if (value <= 0)
{
thresholdAmount = 0;
}
else
{
thresholdAmount = value;
}
OnPropertyChanged(nameof(ThresholdAmount));
}
}
private bool isStackable = false;
/// <summary>
/// 优惠券是否可叠加使用. 默认为不可叠加使用
/// </summary>
public bool IsStackable
{
get { return isStackable; }
set
{
isStackable = value;
OnPropertyChanged(nameof(IsStackable));
}
}
private bool isAutoPickUp = false;
/// <summary>
/// 是否可自动领取. 默认为不可自动领取
/// </summary>
public bool IsAutoPickUp
{
get { return isAutoPickUp; }
set
{
isAutoPickUp = value;
if (isAutoPickUp)
{
IsPickedUp = true;
}
OnPropertyChanged(nameof(IsAutoPickUp));
}
}
private bool isPickedUp = false;
/// <summary>
/// 是否已领取
/// </summary>
public bool IsPickedUp
{
get { return isPickedUp; }
set
{
isAutoPickUp = value;
OnPropertyChanged(nameof(IsPickedUp));
}
}
//是否过期
public bool IsExpired => IsPickedUp && ExpireDate < EffectiveDate;
private bool isAvailable = true;
/// <summary>
/// 是否可用。 如为否,则不可领取,不可使用
/// </summary>
public bool IsAvailable
{
get { return isAvailable; }
set
{
isAvailable = value;
OnPropertyChanged(nameof(IsAvailable));
}
}
/// <summary>
/// 是否可领取
/// </summary>
public bool CanPickUp { get; set; }
#endregion
public void PickUp()
{
bool canPickup = CheckCouponsIsInAvailablePickupPeriod();
if (canPickup)
{
IsPickedUp = true;
EffectiveDate = DateTime.Now;
}
}
/// <summary>
/// 检查优惠券是否在可领取日期范围内
/// </summary>
/// <returns></returns>
private bool CheckCouponsIsInAvailablePickupPeriod()
{
if (CanPickUpStartTime == null || CanPickUpEndTime == null)
{
return false;
}
DateTime now = DateTime.Now;
//还未到可领取事件,不可领取
if (now < CanPickUpStartTime)
{
return false;
}
//已过领取事件,不可领取
if (now >= CanPickUpEndTime)
{
return false;
}
return true;
}
/// <summary>
/// 检查优惠券可领取状态
/// </summary>
/// <returns></returns>
private bool CheckCouponsCanPickableState()
{
if (IsPickedUp)
{
return false;
}
//是否在可领取日期范围内
bool isInAvailablePickupPeriod = CheckCouponsIsInAvailablePickupPeriod();
return isInAvailablePickupPeriod;
}
private bool CheckCouponsAvailableState()
{
//优惠券已领取
if (IsPickedUp)
{
if (EffectiveDate == null || ExpireDate == null)
{
return false;
}
DateTime now = DateTime.Now;
//已过有效期
if (now >= CanPickUpEndTime)
{
return false;
}
return true;
}
else
{
//是否在可领取日期范围内
bool isInAvailablePickupPeriod = CheckCouponsIsInAvailablePickupPeriod();
//已过可领取日期
if (!isInAvailablePickupPeriod)
{
return false;
}
}
return true;
}
}
}
WPF优惠券设计
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...