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