from celery import shared_task from .models import Files as Files_models from datetime import datetime, timedelta from django.utils import timezone from order.models import Order as Order_models import os @shared_task def add(x, y): return x + y # 每隔4小时,删除一份文件 @shared_task def del_file(): def run(file_list): # 创建一个循环语句 for file in file_list: # 获取文件的绝对路径 file_path = os.getcwd() + '/' + file.file_path.url try: # 删除文件 os.remove(file_path) except OSError as e: print("Error: %s : %s" % (file_path, e.strerror)) # 删除数据库数据 # file.delete() Files_models.objects.filter(id=file.id).update(is_delete=1) # 修改数据状态 # 将当前时间转换为时区感知的时间 now_aware = timezone.make_aware(datetime.now(), timezone.get_current_timezone()) # 比当前时间早4小时的时间 three_hours_ago = now_aware - timedelta(hours=4) three_hours_ago2 = now_aware - timedelta(hours=2) print(three_hours_ago) print(three_hours_ago2) print(now_aware) # 找到不存在订单id,并且上传时间比当前时间早4小时的文件数据,将其删除 files_to_delete = Files_models.objects.filter(order_id__isnull=True, user_id__isnull=True, service_id__isnull=True, create_time__gt=three_hours_ago) run(files_to_delete) # 查询是否存在手动删除的数据 files_to_delete = Files_models.objects.filter(delete_time__gte=three_hours_ago) del_files = [] for item in files_to_delete: order = Order_models.objects.filter(id=item.order_id, status=3) # 如果文件数据与订单id绑定,则查询订单是否完成,如果已经完成则删除用户已经上传的数据 if order.get('id', None) is not None: del_files.append(item) run(del_files) # print(files_to_delete) @shared_task def del_one_file(file_id): files_to_delete = Files_models.objects.filter(id__isnull=True, service_id__isnull=True, id=file_id) # 创建一个循环语句 for file in files_to_delete: # 获取文件的绝对路径 file_path = os.getcwd() + '/' + file.file_path.url try: # 删除文件 os.remove(file_path) except OSError as e: print("Error: %s : %s" % (file_path, e.strerror)) # 删除数据库数据 file.delete()