|
@@ -8,6 +8,7 @@ import time
|
|
|
import zipfile
|
|
|
|
|
|
import xlwt
|
|
|
+from django.db.models import Count
|
|
|
|
|
|
from django.http import StreamingHttpResponse, HttpResponse, QueryDict
|
|
|
from django.utils.decorators import method_decorator
|
|
@@ -17,7 +18,7 @@ from django.db import transaction
|
|
|
|
|
|
from AnsjerUIDManage.config import BASE_DIR
|
|
|
from Model.models import UIDModel, UserUIDModel, UserModel, LogModel, MacModel, OrderTaskModel, OrderUIDModel, \
|
|
|
- SerialNumberModel, OrderSerialNumberModel
|
|
|
+ SerialNumberModel, OrderSerialNumberModel, UserSerialNumberModel
|
|
|
from Object.RedisObject import RedisObject
|
|
|
from Object.TokenObject import TokenObject
|
|
|
from Object.ResponseObject import ResponseObject
|
|
@@ -254,6 +255,130 @@ class UploadUIDFileView(View):
|
|
|
return str.format(operation=operation, quantity=quantity, area='国外')
|
|
|
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+class UploadSerialNumberFileView(View):
|
|
|
+
|
|
|
+ @method_decorator(csrf_exempt)
|
|
|
+ def dispatch(self, request, *args, **kwargs):
|
|
|
+ return super(UploadSerialNumberFileView, self).dispatch(request, *args, **kwargs)
|
|
|
+
|
|
|
+ def get(self, request, *args, **kwargs):
|
|
|
+ request.encoding = 'utf-8'
|
|
|
+ request_dict = request.GET
|
|
|
+ fileName = request.FILES.get('fileName', None)
|
|
|
+ return self.validate(fileName, request_dict, request)
|
|
|
+
|
|
|
+ def post(self, request, *args, **kwargs):
|
|
|
+ request.encoding = 'utf-8'
|
|
|
+ request_dict = request.POST
|
|
|
+ fileName = request.FILES.get('fileName', None)
|
|
|
+ return self.validate(fileName, request_dict, request)
|
|
|
+
|
|
|
+ def validate(self, fileName, request_dict, request):
|
|
|
+ token = request_dict.get('token', None)
|
|
|
+ area = request_dict.get('area', None)
|
|
|
+ isReset = request_dict.get('isReset', 0)
|
|
|
+ content = request_dict.get('fileName', None)
|
|
|
+ print('content')
|
|
|
+ print(content)
|
|
|
+
|
|
|
+ content = base64.b64decode(content).decode().strip()
|
|
|
+ content = content[3:(len(content) - 3)]
|
|
|
+ uids = content.split('\n')
|
|
|
+ # print(uids)
|
|
|
+ # print(len(uids))
|
|
|
+
|
|
|
+ response = ResponseObject()
|
|
|
+
|
|
|
+ tko = TokenObject(token)
|
|
|
+ if tko.code != 0:
|
|
|
+ return response.json(tko.code)
|
|
|
+
|
|
|
+ # if not fileName and not area:
|
|
|
+ # return response.json(444, 'fileName,area')
|
|
|
+
|
|
|
+ data = {}
|
|
|
+ duplicate = []
|
|
|
+ for line in uids:
|
|
|
+
|
|
|
+ if len(line) < 20:
|
|
|
+ continue
|
|
|
+
|
|
|
+ if data.__contains__(line):
|
|
|
+ duplicate.append(line)
|
|
|
+ else:
|
|
|
+ data[line] = ''
|
|
|
+
|
|
|
+ self.do_reset(data, response, area, request, tko)
|
|
|
+
|
|
|
+ def do_reset(self, data, response, area, request, token):
|
|
|
+ keys = data.keys()
|
|
|
+ serial_numbers = []
|
|
|
+ count = 0
|
|
|
+ for key in keys:
|
|
|
+ serial_numbers.append(key.strip())
|
|
|
+ if len(serial_numbers) % 5000 == 0:
|
|
|
+ count += self.do_update_uid_status(serial_numbers, area)
|
|
|
+ serial_numbers.clear()
|
|
|
+
|
|
|
+ if len(serial_numbers) > 0:
|
|
|
+ count += self.do_update_uid_status(serial_numbers, area)
|
|
|
+ serial_numbers.clear()
|
|
|
+
|
|
|
+ operation = self.formatOperation('重置', int(count), int(area))
|
|
|
+ self.add_log(request, operation, token)
|
|
|
+ return response.json(0)
|
|
|
+
|
|
|
+ def do_update_uid_status(self, uids, area):
|
|
|
+ uid_qs = UIDModel.objects.filter(uid__in=uids, area=area, status=2)
|
|
|
+ if uid_qs.exists():
|
|
|
+ uid_ids = []
|
|
|
+ for uid in uid_qs:
|
|
|
+ if uid.status == 2:
|
|
|
+ uid.status = 1
|
|
|
+ uid_ids.append(uid.id)
|
|
|
+ UIDModel.objects.bulk_update(uid_qs, fields=['status'])
|
|
|
+
|
|
|
+ try:
|
|
|
+ OrderUIDModel.objects.filter(uid__id__in=tuple(uid_ids)).delete()
|
|
|
+ except Exception as e:
|
|
|
+ print(e)
|
|
|
+
|
|
|
+ return uid_qs.count()
|
|
|
+ return 0
|
|
|
+
|
|
|
+ def add_log(self, request, operation, token):
|
|
|
+ ip = CommonService.get_ip_address(request)
|
|
|
+ now_time = time.time()
|
|
|
+ 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': json.dumps(content),
|
|
|
+ 'ip': ip,
|
|
|
+ 'time': now_time,
|
|
|
+ 'url': 'upload',
|
|
|
+ 'operation': operation,
|
|
|
+ 'user': user_qs[0]
|
|
|
+ }
|
|
|
+
|
|
|
+ try:
|
|
|
+ LogModel.objects.create(**log)
|
|
|
+ except Exception as e:
|
|
|
+ print('出错')
|
|
|
+ print(repr(e))
|
|
|
+
|
|
|
+ def formatOperation(self, operation, quantity, area):
|
|
|
+ str = '{operation}{quantity}个{area}UID'
|
|
|
+ if area == 0:
|
|
|
+ return str.format(operation=operation, quantity=quantity, area='国内')
|
|
|
+ else:
|
|
|
+ return str.format(operation=operation, quantity=quantity, area='国外')
|
|
|
+
|
|
|
class DownloadUIDFileView(View):
|
|
|
|
|
|
@method_decorator(csrf_exempt)
|
|
@@ -590,8 +715,21 @@ class DownloadSerialNumberFileView(View):
|
|
|
|
|
|
order = OrderTaskModel.objects.filter(order_number=order_number).order_by('-add_time')[0]
|
|
|
|
|
|
- sn_qs = SerialNumberModel.objects.filter(use_status=0, p2p=area)
|
|
|
- count = sn_qs.count()
|
|
|
+ user_qs = UserModel.objects.filter(id=token.userID)
|
|
|
+ if not user_qs.exists():
|
|
|
+ return response.json(9)
|
|
|
+
|
|
|
+ user = user_qs[0]
|
|
|
+ result = UserSerialNumberModel.objects.filter(user__id=user.id, serial_number__p2p=area,
|
|
|
+ serial_number__use_status=1).aggregate(
|
|
|
+ num=Count('serial_number__use_status'))
|
|
|
+
|
|
|
+
|
|
|
+ us_qs = UserSerialNumberModel.objects.filter(user__id=user.id, serial_number__p2p=area,
|
|
|
+ serial_number__use_status=1).values('serial_number')
|
|
|
+
|
|
|
+ sn_qs = SerialNumberModel.objects.filter(id__in=us_qs)
|
|
|
+ count = result['num']
|
|
|
if count < quantity:
|
|
|
return response.json(444, '序列号不足')
|
|
|
|
|
@@ -642,7 +780,7 @@ class DownloadSerialNumberFileView(View):
|
|
|
id=item.id,
|
|
|
serial_number = item.serial_number,
|
|
|
status=item.status,
|
|
|
- use_status=1,
|
|
|
+ use_status=2,
|
|
|
p2p=item.p2p,
|
|
|
add_time=item.add_time
|
|
|
)
|