12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- 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()
|