Ver código fonte

优化删除逻辑

john 2 anos atrás
pai
commit
a9ad072065
4 arquivos alterados com 60 adições e 84 exclusões
  1. 38 12
      admin_site/files/tasks.py
  2. BIN
      admin_site/mysite.sqlite
  3. 7 72
      admin_site/requirements.txt
  4. 15 0
      requirements.txt

+ 38 - 12
admin_site/files/tasks.py

@@ -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

BIN
admin_site/mysite.sqlite


+ 7 - 72
admin_site/requirements.txt

@@ -1,76 +1,11 @@
-apturl==0.5.2
-asgiref==3.6.0
-blinker==1.4
-Brlapi==0.8.3
-certifi==2020.6.20
-chardet==4.0.0
-click==8.0.3
-colorama==0.4.4
-command-not-found==0.3
-cryptography==3.4.8
-cupshelpers==1.0
-dbus-python==1.2.18
-defer==1.0.6
-distro==1.7.0
-distro-info===1.1build1
 Django==4.1.7
-django-cors-headers==3.14.0
 djangorestframework==3.14.0
-httplib2==0.20.2
-idna==3.3
-importlib-metadata==4.6.4
-jeepney==0.7.1
-keyring==23.5.0
-language-selector==0.1
-launchpadlib==1.10.16
-lazr.restfulclient==0.14.4
-lazr.uri==1.0.6
-louis==3.20.0
-macaroonbakery==1.3.1
-more-itertools==8.10.0
-mysqlclient==2.1.1
-netifaces==0.11.0
-oauthlib==3.2.0
-olefile==0.46
-pexpect==4.8.0
-Pillow==9.0.1
-protobuf==3.12.4
-psutil==5.9.0
-ptyprocess==0.7.0
-pycairo==1.20.1
-pycups==2.0.1
-PyGObject==3.42.1
+joblib==1.2.0
+matplotlib==3.7.1
+numpy==1.23.3
+pandas==2.0.0
 PyJWT==2.3.0
-pymacaroons==0.13.0
-PyNaCl==1.5.0
-pyparsing==2.4.7
-pyRFC3339==1.1
-python-apt==2.4.0+ubuntu1
-python-dateutil==2.8.1
-python-debian===0.1.43ubuntu1
+PyJWT==2.6.0
+pyreadr==0.4.7
 pytz==2022.1
-pyxdg==0.27
-PyYAML==5.4.1
-reportlab==3.6.8
-requests==2.25.1
-screen-resolution-extra==0.0.0
-SecretStorage==3.3.1
-six==1.16.0
-sqlparse==0.4.3
-systemd-python==234
-ubuntu-advantage-tools==8001
-ubuntu-drivers-common==0.0.0
-ufw==0.36.1
-unattended-upgrades==0.1
-urllib3==1.26.5
-wadllib==1.3.6
-xdg==5
-xkit==0.0.0
-zipp==1.0.0
-
-celery~=5.2.7
-redis~=4.5.4
-pandas~=2.0.0
-matplotlib~=3.7.1
-scikit-learn~=1.2.2
-numpy~=1.23.3
+scikit_learn==1.2.2

+ 15 - 0
requirements.txt

@@ -0,0 +1,15 @@
+Django==4.1.7
+djangorestframework==3.14.0
+joblib==1.2.0
+matplotlib==3.7.1
+numpy==1.23.3
+pandas==2.0.0
+pip==21.2.4
+pip==23.0.1
+PyJWT==2.3.0
+PyJWT==2.6.0
+pyreadr==0.4.7
+pytz==2022.1
+rpy2==3.5.11
+scikit_learn==1.2.2
+target==0.0.11