优惠券更新。

This commit is contained in:
aaron 2025-02-26 14:12:12 +08:00
parent 3e4535c2d1
commit f1d2b7f365
5 changed files with 35 additions and 50 deletions

View File

@ -15,6 +15,7 @@ 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
from app.core.coupon_manager import CouponManager
router = APIRouter() router = APIRouter()
@ -184,21 +185,14 @@ async def receive_coupons(
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:
# 循环发放指定数量的优惠券
for _ in range(count):
# 当天晚上12点过期
expire_time = datetime.combine(today, datetime.max.time()) expire_time = datetime.combine(today, datetime.max.time())
manager = CouponManager(db)
user_coupon = UserCouponDB( manager.add_coupon(
user_id=current_user.userid, user_id=current_user.userid,
coupon_id=coupon.id, coupon_id=coupon.id,
coupon_name=coupon.name,
coupon_amount=coupon.amount,
coupon_type=coupon.coupon_type,
expire_time= expire_time, expire_time= expire_time,
status=CouponStatus.UNUSED count=count
) )
db.add(user_coupon)
# 检查是否领取过优惠券 # 检查是否领取过优惠券
receive_record = db.query(CouponReceiveRecordDB).filter( receive_record = db.query(CouponReceiveRecordDB).filter(

View File

@ -41,6 +41,7 @@ from app.core.wecombot import WecomBot
from app.models.config import ConfigDB from app.models.config import ConfigDB
from app.core.mpmessage import sent_order_status_change_message from app.core.mpmessage import sent_order_status_change_message
from fastapi import BackgroundTasks from fastapi import BackgroundTasks
from app.core.coupon_manager import CouponManager
router = APIRouter() router = APIRouter()
@ -993,6 +994,11 @@ async def complete_order(
ShippingOrderDB.deliveryman_user_id == current_user.userid ShippingOrderDB.deliveryman_user_id == current_user.userid
).first() ).first()
# 订单用户
order_user = db.query(UserDB).filter(
UserDB.userid == order.userid
).first()
if not order: if not order:
return error_response(code=404, message="订单不存在") return error_response(code=404, message="订单不存在")
@ -1025,9 +1031,25 @@ async def complete_order(
description=f"配送订单收益", description=f"配送订单收益",
transaction_id=orderid transaction_id=orderid
) )
db.commit() 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() wecom_bot = WecomBot()
background_tasks.add_task( background_tasks.add_task(

View File

@ -26,6 +26,7 @@ async def add_points(
point_record = PointRecordDB( point_record = PointRecordDB(
user_id=record.user_id, user_id=record.user_id,
points=record.points, points=record.points,
type=record.type,
description=record.description description=record.description
) )
db.add(point_record) db.add(point_record)

View File

@ -92,9 +92,6 @@ async def login(
db.add(user) db.add(user)
db.flush() # 获取用户ID db.flush() # 获取用户ID
# 发放优惠券
issue_register_coupons(db, user.userid)
db.commit() db.commit()
db.refresh(user) db.refresh(user)
@ -192,9 +189,6 @@ async def phone_login(
db.add(user) db.add(user)
db.flush() db.flush()
# 发放优惠券
issue_register_coupons(db, user.userid)
db.commit() db.commit()
db.refresh(user) db.refresh(user)
@ -383,33 +377,6 @@ async def get_referral_users(
"items": user_list "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) @router.get("/list", response_model=ResponseModel)
async def get_list( async def get_list(
skip: int = 0, skip: int = 0,

View File

@ -25,6 +25,7 @@ class PointRecordDB(Base):
class PointRecordCreate(BaseModel): class PointRecordCreate(BaseModel):
user_id: int = Field(..., description="用户ID") user_id: int = Field(..., description="用户ID")
points: float = Field(..., description="积分变动值,可为正或负") points: float = Field(..., description="积分变动值,可为正或负")
type: PointRecordType = Field(..., description="积分变动类型")
description: str = Field(..., min_length=1, max_length=200) description: str = Field(..., min_length=1, max_length=200)
class PointRecordInfo(BaseModel): class PointRecordInfo(BaseModel):