增加检测是否可以领取
This commit is contained in:
parent
79a856f8c5
commit
9489f40406
@ -14,9 +14,10 @@ from app.api.deps import get_current_user, get_admin_user
|
|||||||
from app.models.user import UserDB
|
from app.models.user import UserDB
|
||||||
from app.core.response import success_response, error_response, ResponseModel
|
from app.core.response import success_response, error_response, ResponseModel
|
||||||
from typing import Optional, List
|
from typing import Optional, List
|
||||||
from datetime import datetime, time
|
from datetime import datetime, time, timedelta
|
||||||
from app.core.coupon_manager import CouponManager
|
from app.core.coupon_manager import CouponManager
|
||||||
|
|
||||||
|
|
||||||
router = APIRouter()
|
router = APIRouter()
|
||||||
|
|
||||||
@router.post("", response_model=ResponseModel)
|
@router.post("", response_model=ResponseModel)
|
||||||
@ -137,13 +138,12 @@ async def get_coupon_activities(
|
|||||||
"items": activities_data
|
"items": activities_data
|
||||||
})
|
})
|
||||||
|
|
||||||
@router.post("/{activity_id}/receive", response_model=ResponseModel)
|
async def check_activity_can_receive(
|
||||||
async def receive_coupons(
|
|
||||||
activity_id: int,
|
activity_id: int,
|
||||||
db: Session = Depends(get_db),
|
db: Session = Depends(get_db),
|
||||||
current_user: UserDB = Depends(get_current_user)
|
current_user: UserDB = Depends(get_current_user)
|
||||||
):
|
):
|
||||||
"""领取优惠券"""
|
"""检查活动是否可以领取"""
|
||||||
# 查询活动
|
# 查询活动
|
||||||
activity = db.query(CouponActivityDB).filter(
|
activity = db.query(CouponActivityDB).filter(
|
||||||
CouponActivityDB.id == activity_id,
|
CouponActivityDB.id == activity_id,
|
||||||
@ -151,12 +151,12 @@ async def receive_coupons(
|
|||||||
).first()
|
).first()
|
||||||
|
|
||||||
if not activity:
|
if not activity:
|
||||||
return error_response(code=404, message="活动不存在或已结束")
|
return False, "活动不存在或已结束", None
|
||||||
|
|
||||||
# 检查领取时间
|
# 检查领取时间
|
||||||
current_time = datetime.now().time()
|
current_time = datetime.now().time()
|
||||||
if current_time < activity.daily_start_time or current_time > activity.daily_end_time:
|
if current_time < activity.daily_start_time or current_time > activity.daily_end_time:
|
||||||
return error_response(code=400, message="不在领取时间范围内")
|
return False, "不在领取时间范围内", activity
|
||||||
|
|
||||||
# 检查总领取次数
|
# 检查总领取次数
|
||||||
total_receive_count = db.query(func.count(CouponReceiveRecordDB.id)).filter(
|
total_receive_count = db.query(func.count(CouponReceiveRecordDB.id)).filter(
|
||||||
@ -165,7 +165,7 @@ async def receive_coupons(
|
|||||||
).scalar()
|
).scalar()
|
||||||
|
|
||||||
if activity.total_limit > 0 and total_receive_count >= activity.total_limit:
|
if activity.total_limit > 0 and total_receive_count >= activity.total_limit:
|
||||||
return error_response(code=400, message=f"您只能领取 {activity.total_limit} 次")
|
return False, f"您只能领取 {activity.total_limit} 次", activity
|
||||||
|
|
||||||
# 检查今日领取次数
|
# 检查今日领取次数
|
||||||
today = datetime.now().date()
|
today = datetime.now().date()
|
||||||
@ -177,15 +177,29 @@ async def receive_coupons(
|
|||||||
).scalar()
|
).scalar()
|
||||||
|
|
||||||
if today_receive_count >= activity.daily_limit:
|
if today_receive_count >= activity.daily_limit:
|
||||||
return error_response(code=400, message="今日领取次数已达上限")
|
return False, "今日领取次数已达上限", activity
|
||||||
|
|
||||||
|
return True, "可领取", activity
|
||||||
|
|
||||||
|
@router.post("/{activity_id}/receive", response_model=ResponseModel)
|
||||||
|
async def receive_coupons(
|
||||||
|
activity_id: int,
|
||||||
|
db: Session = Depends(get_db),
|
||||||
|
current_user: UserDB = Depends(get_current_user)
|
||||||
|
):
|
||||||
|
"""领取优惠券"""
|
||||||
|
can_receive, message, activity = await check_activity_can_receive(activity_id, db, current_user)
|
||||||
|
if not can_receive:
|
||||||
|
return error_response(code=400, message=message)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# 发放优惠券
|
# 发放优惠券
|
||||||
for coupon_id, count in activity.coupon_config.items():
|
for coupon_id, count in activity.coupon_config.items():
|
||||||
coupon = db.query(CouponDB).filter(CouponDB.id == coupon_id).first()
|
coupon = db.query(CouponDB).filter(CouponDB.id == coupon_id).first()
|
||||||
if coupon:
|
if coupon:
|
||||||
expire_time = datetime.combine(today, datetime.max.time())
|
today = datetime.now().date()
|
||||||
|
#过期时间:30 天
|
||||||
|
expire_time = datetime.combine(today, datetime.max.time()) + timedelta(days=30)
|
||||||
manager = CouponManager(db)
|
manager = CouponManager(db)
|
||||||
manager.add_coupon(
|
manager.add_coupon(
|
||||||
user_id=current_user.userid,
|
user_id=current_user.userid,
|
||||||
@ -218,6 +232,22 @@ async def receive_coupons(
|
|||||||
db.rollback()
|
db.rollback()
|
||||||
return error_response(code=500, message=f"领取失败: {str(e)}")
|
return error_response(code=500, message=f"领取失败: {str(e)}")
|
||||||
|
|
||||||
|
@router.get("/{activity_id}/check_receive", response_model=ResponseModel)
|
||||||
|
async def check_receive(
|
||||||
|
activity_id: int,
|
||||||
|
db: Session = Depends(get_db),
|
||||||
|
current_user: UserDB = Depends(get_current_user)
|
||||||
|
):
|
||||||
|
"""检查是否领取过优惠券"""
|
||||||
|
can_receive, message, activity = await check_activity_can_receive(activity_id, db, current_user)
|
||||||
|
if not can_receive:
|
||||||
|
return error_response(code=400, message=message)
|
||||||
|
|
||||||
|
return success_response(data={
|
||||||
|
"can_receive": can_receive,
|
||||||
|
"message": message
|
||||||
|
})
|
||||||
|
|
||||||
@router.put("/{activity_id}", response_model=ResponseModel)
|
@router.put("/{activity_id}", response_model=ResponseModel)
|
||||||
async def update_coupon_activity(
|
async def update_coupon_activity(
|
||||||
activity_id: int,
|
activity_id: int,
|
||||||
|
|||||||
@ -137,7 +137,7 @@ async def wechat_corp_callback(
|
|||||||
if update_detail == 'add_member':
|
if update_detail == 'add_member':
|
||||||
print(f"发送欢迎消息")
|
print(f"发送欢迎消息")
|
||||||
# 发送欢迎消息
|
# 发送欢迎消息
|
||||||
await wecom_client.send_welcome_message(chat_id)
|
# await wecom_client.send_welcome_message(chat_id)
|
||||||
|
|
||||||
|
|
||||||
return Response(content="success", media_type="text/plain")
|
return Response(content="success", media_type="text/plain")
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user