diff --git a/app/api/endpoints/coupon_activity.py b/app/api/endpoints/coupon_activity.py index 7892224..082d5ab 100644 --- a/app/api/endpoints/coupon_activity.py +++ b/app/api/endpoints/coupon_activity.py @@ -14,7 +14,8 @@ from app.api.deps import get_current_user, get_admin_user from app.models.user import UserDB from app.core.response import success_response, error_response, ResponseModel from typing import Optional, List -from datetime import datetime, time +from datetime import datetime, time +from app.core.coupon_manager import CouponManager router = APIRouter() @@ -184,21 +185,14 @@ async def receive_coupons( for coupon_id, count in activity.coupon_config.items(): coupon = db.query(CouponDB).filter(CouponDB.id == coupon_id).first() if coupon: - # 循环发放指定数量的优惠券 - for _ in range(count): - # 当天晚上12点过期 - expire_time = datetime.combine(today, datetime.max.time()) - - user_coupon = UserCouponDB( - user_id=current_user.userid, - coupon_id=coupon.id, - coupon_name=coupon.name, - coupon_amount=coupon.amount, - coupon_type=coupon.coupon_type, - expire_time=expire_time, - status=CouponStatus.UNUSED - ) - db.add(user_coupon) + expire_time = datetime.combine(today, datetime.max.time()) + manager = CouponManager(db) + manager.add_coupon( + user_id=current_user.userid, + coupon_id=coupon.id, + expire_time= expire_time, + count=count + ) # 检查是否领取过优惠券 receive_record = db.query(CouponReceiveRecordDB).filter( diff --git a/app/api/endpoints/order.py b/app/api/endpoints/order.py index 0988bc7..ba34140 100644 --- a/app/api/endpoints/order.py +++ b/app/api/endpoints/order.py @@ -41,6 +41,7 @@ from app.core.wecombot import WecomBot from app.models.config import ConfigDB from app.core.mpmessage import sent_order_status_change_message from fastapi import BackgroundTasks +from app.core.coupon_manager import CouponManager router = APIRouter() @@ -992,6 +993,11 @@ async def complete_order( ShippingOrderDB.orderid == orderid, ShippingOrderDB.deliveryman_user_id == current_user.userid ).first() + + # 订单用户 + order_user = db.query(UserDB).filter( + UserDB.userid == order.userid + ).first() if not order: return error_response(code=404, message="订单不存在") @@ -1025,9 +1031,25 @@ async def complete_order( description=f"配送订单收益", transaction_id=orderid ) - db.commit() + # 如果当前订单是首单,给邀请人发放优惠券 + if order.is_first_order: + # 查询邀请人 + invite_user = db.query(UserDB).filter( + UserDB.referral_code == order_user.user_code + ).first() + + if invite_user: + expire_time = datetime.now() + timedelta(days=settings.FIRST_ORDER_REFERRAL_COUPON_EXPIRE_DAYS) + manager = CouponManager(db) + manager.add_coupon( + user_id=invite_user.userid, + coupon_id=settings.FIRST_ORDER_REFERRAL_COUPON_ID, + expire_time=expire_time, + count=settings.FIRST_ORDER_REFERRAL_COUPON_COUNT + ) + # 发送企业微信消息 wecom_bot = WecomBot() background_tasks.add_task( diff --git a/app/api/endpoints/point.py b/app/api/endpoints/point.py index 2e4d5cb..17edd37 100644 --- a/app/api/endpoints/point.py +++ b/app/api/endpoints/point.py @@ -26,6 +26,7 @@ async def add_points( point_record = PointRecordDB( user_id=record.user_id, points=record.points, + type=record.type, description=record.description ) db.add(point_record) diff --git a/app/api/endpoints/user.py b/app/api/endpoints/user.py index 84b1575..79d1820 100644 --- a/app/api/endpoints/user.py +++ b/app/api/endpoints/user.py @@ -92,9 +92,6 @@ async def login( db.add(user) db.flush() # 获取用户ID - # 发放优惠券 - issue_register_coupons(db, user.userid) - db.commit() db.refresh(user) @@ -192,9 +189,6 @@ async def phone_login( db.add(user) db.flush() - # 发放优惠券 - issue_register_coupons(db, user.userid) - db.commit() db.refresh(user) @@ -383,33 +377,6 @@ async def get_referral_users( "items": user_list }) -def issue_register_coupons(db: Session, user_id: int): - """发放注册优惠券 - Args: - db: 数据库会话 - user_id: 用户ID - """ - register_coupons = settings.REGISTER_COUPONS - - # 设置过期时间 - for config in register_coupons: - coupon = db.query(CouponDB).filter( - CouponDB.id == config["coupon_id"] - ).first() - - if coupon: - expire_time = datetime.now() + timedelta(days=config["expire_days"]) - for _ in range(config["count"]): - user_coupon = UserCouponDB( - user_id=user_id, - coupon_id=coupon.id, - coupon_name=coupon.name, - coupon_amount=coupon.amount, - expire_time=expire_time, - status="unused" - ) - db.add(user_coupon) - @router.get("/list", response_model=ResponseModel) async def get_list( skip: int = 0, diff --git a/app/models/point.py b/app/models/point.py index e3abd96..f25f44a 100644 --- a/app/models/point.py +++ b/app/models/point.py @@ -25,6 +25,7 @@ class PointRecordDB(Base): class PointRecordCreate(BaseModel): user_id: int = Field(..., description="用户ID") points: float = Field(..., description="积分变动值,可为正或负") + type: PointRecordType = Field(..., description="积分变动类型") description: str = Field(..., min_length=1, max_length=200) class PointRecordInfo(BaseModel):