85 lines
2.9 KiB
Python
85 lines
2.9 KiB
Python
"""
|
||
阿龙电竞 - 收支记录定时任务
|
||
处理收支记录表的每日清零
|
||
固定使用ID=1的记录
|
||
"""
|
||
from celery import shared_task
|
||
from django.db import transaction
|
||
from django.utils import timezone
|
||
from datetime import datetime
|
||
from decimal import Decimal
|
||
import logging
|
||
|
||
# 导入模型
|
||
from config.models import Szjilu
|
||
from utils.celery_utils import log_task_execution, rollback_on_failure
|
||
|
||
logger = logging.getLogger(__name__)
|
||
|
||
@shared_task
|
||
@rollback_on_failure("收支记录每日清零")
|
||
def daily_sz_reset_task():
|
||
"""
|
||
收支记录每日清零 - 每天凌晨0点5分执行
|
||
清零收支记录表的今日相关字段,固定使用ID=1的记录
|
||
"""
|
||
try:
|
||
with transaction.atomic():
|
||
# 获取今天的日期
|
||
today = datetime.now().strftime('%Y-%m-%d')
|
||
|
||
logger.info(f"开始执行收支记录清零任务,日期: {today}")
|
||
|
||
# 查询ID=1的收支记录,如果不存在则创建
|
||
try:
|
||
szjilu = Szjilu.objects.get(id=1)
|
||
logger.info(f"找到ID=1的收支记录")
|
||
except Szjilu.DoesNotExist:
|
||
# 创建ID=1的初始记录
|
||
szjilu = Szjilu.objects.create(
|
||
id=1,
|
||
TotalIncome=Decimal('0.00'),
|
||
TotalFlow=Decimal('0.00'),
|
||
TotalExpense=Decimal('0.00'),
|
||
DailyExpense=Decimal('0.00'),
|
||
DailyFlow=Decimal('0.00')
|
||
)
|
||
logger.info(f"创建ID=1的收支记录")
|
||
|
||
# 记录清零前的值(用于日志)
|
||
old_jrzc = szjilu.DailyExpense
|
||
old_jrls = szjilu.DailyFlow
|
||
|
||
# 清零今日字段
|
||
szjilu.DailyExpense = Decimal('0.00')
|
||
szjilu.DailyFlow = Decimal('0.00')
|
||
szjilu.save(update_fields=['DailyExpense', 'DailyFlow', 'UpdateTime'])
|
||
|
||
logger.info(f"收支记录清零完成,今日支出原值: {old_jrzc},今日流水原值: {old_jrls}")
|
||
|
||
result_msg = f"收支记录清零完成 - 日期: {today}, 记录ID: {szjilu.id}"
|
||
|
||
log_task_execution("收支记录每日清零", True, result_msg)
|
||
|
||
return {
|
||
"success": True,
|
||
"date": today,
|
||
"record_id": szjilu.id,
|
||
"jrzc_cleared": True,
|
||
"jrls_cleared": True,
|
||
"old_jrzc": str(old_jrzc),
|
||
"old_jrls": str(old_jrls),
|
||
"message": result_msg
|
||
}
|
||
|
||
except Exception as e:
|
||
error_msg = f"收支记录每日清零失败: {str(e)}"
|
||
logger.error(error_msg)
|
||
log_task_execution("收支记录每日清零", False, error_msg)
|
||
|
||
return {
|
||
"success": False,
|
||
"error": str(e),
|
||
"date": datetime.now().strftime('%Y-%m-%d'),
|
||
"message": error_msg
|
||
} |