فهرست منبع

获取序列号程序优化,记录操作日志

locky 3 سال پیش
والد
کامیت
c4b54a45ae
1فایلهای تغییر یافته به همراه34 افزوده شده و 20 حذف شده
  1. 34 20
      Controller/SerialNumberController.py

+ 34 - 20
Controller/SerialNumberController.py

@@ -1,5 +1,6 @@
 #!/usr/bin/env python3
 # -*- coding: utf-8 -*-
+import json
 import logging
 import random
 import time
@@ -9,7 +10,8 @@ from django.db import transaction
 from django.db.models import Count
 from django.views import View
 
-from Model.models import SerialNumberModel, UserModel, UserSerialNumberModel, UserUIDModel, CompanySerialModel, MacModel
+from Model.models import SerialNumberModel, UserModel, UserSerialNumberModel, UserUIDModel, CompanySerialModel, \
+    MacModel, LogModel
 from Object.RedisObject import RedisObject
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
@@ -24,20 +26,20 @@ class SerialNumberView(View):
         request.encoding = 'utf-8'
         request_dict = request.GET
         operation = kwargs.get('operation')
-        return self.validate(request_dict, operation)
+        return self.validate(request_dict, operation, request)
 
     def post(self, request, *args, **kwargs):
         request.encoding = 'utf-8'
         request_dict = request.POST
         operation = kwargs.get('operation')
-        return self.validate(request_dict, operation)
+        return self.validate(request_dict, operation, request)
 
-    def validate(self, request_dict, operation):
+    def validate(self, request_dict, operation, request):
         response = ResponseObject()
         if operation == 'create':
             return self.do_create(request_dict, response)
         elif operation == 'getSerial':
-            return self.do_get_serial_number(request_dict, response)
+            return self.do_get_serial_number(request_dict, request, response)
 
         token = request_dict.get('token', None)
         token = TokenObject(token)
@@ -170,7 +172,7 @@ class SerialNumberView(View):
             return response.json(444)
 
     # 提供给pc端获取序列号
-    def do_get_serial_number(self, request_dict, response):
+    def do_get_serial_number(self, request_dict, request, response):
         quantity = 1   #只能取一个
         company_id = request_dict.get('company_id', None)
         token = request_dict.get('token', None)
@@ -207,13 +209,11 @@ class SerialNumberView(View):
             return response.json(9)
 
         user = user_qs[0]
-        result = UserSerialNumberModel.objects.filter(user__id=user.id,
-                                                      serial_number__use_status=1).aggregate(
-            num=Count('serial_number__use_status'))
+        result = UserSerialNumberModel.objects.filter(user__id=user.id, serial_number__use_status=1).\
+            aggregate(num=Count('serial_number__use_status'))
 
-        us_qs = UserSerialNumberModel.objects.filter(user__id=user.id,
-                                                     serial_number__use_status=1).values(
-            'serial_number__serial_number')
+        us_qs = UserSerialNumberModel.objects.filter(user__id=user.id, serial_number__use_status=1).\
+            values('serial_number__serial_number')
 
         sns = []
         for us in us_qs:
@@ -228,15 +228,15 @@ class SerialNumberView(View):
             mark = cs_qs[0]['company__mark']
 
         sn_qs = SerialNumberModel.objects.filter(serial_number__in=sns)
+        if not sn_qs.exists():
+            return response.json(444, '序列号不足')
         count = result['num']
         if count < quantity:
             redisObject.rpush(key, value)
             return response.json(444, '序列号不足')
 
-        # company_serial_qs = company_serial_qs.values('id', 'serial_number__serial_number', 'company__mark')
-        save_point = transaction.savepoint()  # 设置事务保存点
         try:
-            if sn_qs.exists():
+            with transaction.atomic():      # 开启事务
                 sn_qs = sn_qs[0: quantity]
                 serial_number = sn_qs[0].serial_number
                 # 防止重复获取序列号
@@ -263,14 +263,28 @@ class SerialNumberView(View):
                     serial_number=serial_number,
                     status=sn_qs[0].status,
                     use_status=2,
-                    add_time=sn_qs[0].add_time
+                    add_time=now_time
                 )
                 updates = []
                 updates.append(serialNumberModel)
                 bulk_update(updates)
-            redisObject.rpush(key, value)
-            return response.json(0, {'serial_number': serial_number + mark, 'mac': mac})
+
+                # 记录操作日志
+                ip = CommonService.get_ip_address(request)
+                content = json.loads(json.dumps(request.POST))
+                operation = '获取序列号:{}'.format(serial_number)
+                log = {
+                    'status': 200,
+                    'content': json.dumps(content),
+                    'ip': ip,
+                    'time': now_time,
+                    'url': 'serialNumber/getSerial',
+                    'operation': operation,
+                    'user': user_qs[0]
+                }
+                LogModel.objects.create(**log)
+                redisObject.rpush(key, value)
+                return response.json(0, {'serial_number': serial_number + mark, 'mac': mac})
         except Exception as e:
-            if save_point:
-                transaction.savepoint_rollback(save_point)  # 事务回滚
+            return response.json(500, repr(e))