|
@@ -2,32 +2,58 @@ 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()
|
|
|
+
|
|
|
# 将当前时间转换为时区感知的时间
|
|
|
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__lt=three_hours_ago)
|
|
|
- # 创建一个循环语句
|
|
|
- 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()
|
|
|
+ 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
|