tasks.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. from celery import shared_task
  2. from .models import Files as Files_models
  3. from datetime import datetime, timedelta
  4. from django.utils import timezone
  5. from order.models import Order as Order_models
  6. import os
  7. @shared_task
  8. def add(x, y):
  9. return x + y
  10. # 每隔4小时,删除一份文件
  11. @shared_task
  12. def del_file():
  13. def run(file_list):
  14. # 创建一个循环语句
  15. for file in file_list:
  16. # 获取文件的绝对路径
  17. file_path = os.getcwd() + '/' + file.file_path.url
  18. try:
  19. # 删除文件
  20. os.remove(file_path)
  21. except OSError as e:
  22. print("Error: %s : %s" % (file_path, e.strerror))
  23. # 删除数据库数据
  24. file.delete()
  25. # 将当前时间转换为时区感知的时间
  26. now_aware = timezone.make_aware(datetime.now(), timezone.get_current_timezone())
  27. # 比当前时间早4小时的时间
  28. three_hours_ago = now_aware - timedelta(hours=4)
  29. three_hours_ago2 = now_aware - timedelta(hours=2)
  30. print(three_hours_ago)
  31. print(three_hours_ago2)
  32. print(now_aware)
  33. # 找到不存在订单id,并且上传时间比当前时间早4小时的文件数据,将其删除
  34. files_to_delete = Files_models.objects.filter(order_id__isnull=True, user_id__isnull=True, service_id__isnull=True,
  35. create_time__gt=three_hours_ago)
  36. run(files_to_delete)
  37. # 查询是否存在手动删除的数据
  38. files_to_delete = Files_models.objects.filter(delete_time__gte=three_hours_ago)
  39. del_files = []
  40. for item in files_to_delete:
  41. order = Order_models.objects.filter(id=item.order_id, status=3)
  42. # 如果文件数据与订单id绑定,则查询订单是否完成,如果已经完成则删除用户已经上传的数据
  43. if order.get('id', None) is not None:
  44. del_files.append(item)
  45. run(del_files)
  46. # print(files_to_delete)
  47. @shared_task
  48. def del_one_file(file_id):
  49. files_to_delete = Files_models.objects.filter(id__isnull=True, service_id__isnull=True, id=file_id)
  50. # 创建一个循环语句
  51. for file in files_to_delete:
  52. # 获取文件的绝对路径
  53. file_path = os.getcwd() + '/' + file.file_path.url
  54. try:
  55. # 删除文件
  56. os.remove(file_path)
  57. except OSError as e:
  58. print("Error: %s : %s" % (file_path, e.strerror))
  59. # 删除数据库数据
  60. file.delete()