tanghongbin 4 vuotta sitten
vanhempi
commit
874c8b0be0
2 muutettua tiedostoa jossa 37 lisäystä ja 11 poistoa
  1. 4 2
      Controller/FileController.py
  2. 33 9
      Controller/UIDController.py

+ 4 - 2
Controller/FileController.py

@@ -220,12 +220,14 @@ class UploadUIDFileView(View):
     def add_log(self, request, operation, token):
         ip = CommonService.get_ip_address(request)
         now_time = time.time()
-        content = json.dumps(request.POST)
+        content = json.loads(json.dumps(request.POST))
         user_qs = UserModel.objects.filter(id=token.userID)
 
+        if content.__contains__('fileName'):
+            del content['fileName']
         log = {
             'status': 200,
-            'content': content,
+            'content': json.dumps(content),
             'ip': ip,
             'time': now_time,
             'url': 'upload',

+ 33 - 9
Controller/UIDController.py

@@ -1,8 +1,10 @@
 #!/usr/bin/env python3
 # -*- coding: utf-8 -*-
 import json
+import logging
 import time
 
+from django.db import transaction
 from django.http import StreamingHttpResponse
 from django.utils.decorators import method_decorator
 from django.views import View
@@ -114,6 +116,7 @@ class UIDView(View):
             return response.json(444)
 
     # 分配UID
+    @transaction.atomic
     def do_allot(self, request_dict, response):
         username = request_dict.get('username', None)
         quantity = int(request_dict.get('quantity', None))
@@ -141,12 +144,14 @@ class UIDView(View):
 
         updates = []
         datas = []
+        count = 0
         if uid_qs.exists():
             uid_qs = uid_qs[0:quantity]
             now_time = int(time.time())
+            savePoint = transaction.savepoint()
             for item in uid_qs:
                 item.status = 1
-                item.update_time = now_time
+                item.update_time = time.time()
                 user_uid = UserUIDModel()
                 user_uid.uid = item
                 user_uid.user = allot_user_qs[0]
@@ -156,15 +161,15 @@ class UIDView(View):
                 updates.append(item)
 
                 if len(datas) % 5000 == 0:
-                    UserUIDModel.objects.bulk_create(datas)
-                    UIDModel.objects.bulk_update(updates, fields=['status', 'update_time'])
-                    datas.clear()
-                    updates.clear()
+                    # count += 1
+                    result = self.do_update(datas, updates, savePoint)
+                    if result != 0:
+                        return response.json(result)
+
             if len(datas) > 0:
-                UserUIDModel.objects.bulk_create(datas)
-                UIDModel.objects.bulk_update(updates, fields=['status', 'update_time'])
-                datas.clear()
-                updates.clear()
+                result = self.do_update(datas, updates, savePoint)
+                if result != 0:
+                    return response.json(result)
             redisObject = RedisObject()
             values = uid_qs.values('uid')
             print(values)
@@ -175,6 +180,25 @@ class UIDView(View):
         else:
             return response.json(444)
 
+    def do_update(self, datas, updates, savePoint, count=0):
+        try:
+            try:
+                if count == 2:
+                    raise Exception("Invalid level!")
+                UserUIDModel.objects.bulk_create(datas)
+                UIDModel.objects.bulk_update(updates, fields=['status', 'update_time'])
+                datas.clear()
+                updates.clear()
+            except Exception as e:
+                if savePoint:
+                    transaction.savepoint_rollback(savePoint)
+                djangoLogger = logging.getLogger('django')
+                djangoLogger.exception(repr(e))
+                return 174
+        except Exception as e:
+            return 174
+        return 0
+
     # 把UID表中的数据移动到HistoryUID表中
     def do_remove(self, request_dict, response):
         token = TokenObject(request_dict.get('token', None))