31 lines
1.0 KiB
Python
31 lines
1.0 KiB
Python
# myapp/tasks.py
|
|
from .models import Subscription, TenantBilling
|
|
from django.utils import timezone
|
|
from datetime import timedelta
|
|
|
|
def generate_billing():
|
|
|
|
try:
|
|
# print("generate billing")
|
|
now = timezone.now()
|
|
subscriptions = Subscription.objects.filter(end_date__gte=now)
|
|
|
|
for subscription in subscriptions:
|
|
# 检查是否已经在这个周期生成了账单
|
|
if subscription.last_billed and subscription.last_billed > now - timedelta(days=30):
|
|
continue # 这个订阅的账单已经生成,跳过
|
|
|
|
# 生成新的账单
|
|
billing = TenantBilling(tenant=subscription.tenant, subscription=subscription)
|
|
billing.calculate_total_price()
|
|
|
|
# 更新上次账单生成日期
|
|
subscription.last_billed = now
|
|
subscription.save()
|
|
print("new generate billing")
|
|
return 'bill success'
|
|
except Exception as e:
|
|
# 记录异常
|
|
print(f"Task failed with error: {e}")
|
|
return None
|