From a2ab1c67208e535b1cc9f2f3d61842df4618bc83 Mon Sep 17 00:00:00 2001 From: aaron <> Date: Wed, 26 Feb 2025 12:49:41 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BC=98=E6=83=A0=E5=88=B8?= =?UTF-8?q?=E6=B4=BB=E5=8A=A8=E9=A2=86=E5=8F=96=E6=AC=A1=E6=95=B0=E9=99=90?= =?UTF-8?q?=E5=88=B6=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/endpoints/coupon_activity.py | 14 ++++++++++++-- app/models/coupon_activity.py | 4 ++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/app/api/endpoints/coupon_activity.py b/app/api/endpoints/coupon_activity.py index 7014d00..1f1bdbc 100644 --- a/app/api/endpoints/coupon_activity.py +++ b/app/api/endpoints/coupon_activity.py @@ -132,18 +132,28 @@ async def receive_coupons( if current_time < activity.daily_start_time or current_time > activity.daily_end_time: return error_response(code=400, message="不在领取时间范围内") + # 检查总领取次数 + total_receive_count = db.query(func.count(CouponReceiveRecordDB.id)).filter( + CouponReceiveRecordDB.user_id == current_user.userid, + CouponReceiveRecordDB.activity_id == activity_id + ).scalar() + + if activity.total_limit > 0 and total_receive_count >= activity.total_limit: + return error_response(code=400, message=f"您只能领取 {activity.total_limit} 次") + # 检查今日领取次数 today = datetime.now().date() - receive_count = db.query(func.count(CouponReceiveRecordDB.id)).filter( + today_receive_count = db.query(func.count(CouponReceiveRecordDB.id)).filter( CouponReceiveRecordDB.user_id == current_user.userid, CouponReceiveRecordDB.activity_id == activity_id, CouponReceiveRecordDB.receive_date == today ).scalar() - if receive_count >= activity.daily_limit: + if today_receive_count >= activity.daily_limit: return error_response(code=400, message="今日领取次数已达上限") + try: # 发放优惠券 for coupon_id, count in activity.coupon_config.items(): diff --git a/app/models/coupon_activity.py b/app/models/coupon_activity.py index 6e79980..cc58488 100644 --- a/app/models/coupon_activity.py +++ b/app/models/coupon_activity.py @@ -15,6 +15,7 @@ class CouponActivityDB(Base): end_time = Column(DateTime(timezone=True), nullable=False) # 活动结束时间 daily_start_time = Column(Time, nullable=False) # 每日开始时间 daily_end_time = Column(Time, nullable=False) # 每日结束时间 + total_limit = Column(Integer, nullable=False, default=0) # 总可领取次数, 0表示不限制 daily_limit = Column(Integer, nullable=False, default=1) # 每日可领取次数 is_active = Column(Boolean, nullable=False, default=True) # 是否激活 coupon_config = Column(JSON, nullable=False) # 可领取的优惠券配置 {coupon_id: count} @@ -29,6 +30,7 @@ class CouponActivityCreate(BaseModel): end_time: datetime daily_start_time: time # 每日开始时间 "HH:MM:SS" daily_end_time: time # 每日结束时间 "HH:MM:SS" + total_limit: int = Field(default=0) daily_limit: int = Field(..., gt=0) coupon_config: Dict[int, int] # {coupon_id: count} is_active: bool = Field(default=True) @@ -40,6 +42,7 @@ class CouponActivityUpdate(BaseModel): end_time: Optional[datetime] = None daily_start_time: Optional[time] = None daily_end_time: Optional[time] = None + total_limit: Optional[int] = Field(default=0) daily_limit: Optional[int] = Field(None, gt=0) coupon_config: Optional[Dict[int, int]] = None is_active: Optional[bool] = None @@ -52,6 +55,7 @@ class CouponActivityInfo(BaseModel): end_time: datetime daily_start_time: time daily_end_time: time + total_limit: int daily_limit: int coupon_config: Dict[int, int] is_active: bool