Browse Source

UID绑定订单信息

tanghongbin 5 years ago
parent
commit
657db935c0

+ 63 - 17
Controller/FileController.py

@@ -11,7 +11,7 @@ from django.views import View
 from django.views.decorators.csrf import csrf_exempt
 from django.views.decorators.csrf import csrf_exempt
 from django.db import transaction
 from django.db import transaction
 
 
-from Model.models import UIDModel, UserUIDModel, UserModel, LogModel, MacModel
+from Model.models import UIDModel, UserUIDModel, UserModel, LogModel, MacModel, OrderTaskModel, OrderUIDModel
 from Object.RedisObject import RedisObject
 from Object.RedisObject import RedisObject
 from Object.TokenObject import TokenObject
 from Object.TokenObject import TokenObject
 from Object.ResponseObject import ResponseObject
 from Object.ResponseObject import ResponseObject
@@ -41,8 +41,8 @@ class UploadUIDFileView(View):
         area = request_dict.get('area', None)
         area = request_dict.get('area', None)
         isReset = request_dict.get('isReset', 0)
         isReset = request_dict.get('isReset', 0)
         content = request_dict.get('fileName', None)
         content = request_dict.get('fileName', None)
-        # print('content')
-        # print(content)
+        print('content')
+        print(content)
 
 
         content = base64.b64decode(content).decode().strip()
         content = base64.b64decode(content).decode().strip()
         content = content[3:(len(content) - 3)]
         content = content[3:(len(content) - 3)]
@@ -198,10 +198,18 @@ class UploadUIDFileView(View):
     def do_update_uid_status(self, uids, area):
     def do_update_uid_status(self, uids, area):
         uid_qs = UIDModel.objects.filter(uid__in=uids, area=area, status=2)
         uid_qs = UIDModel.objects.filter(uid__in=uids, area=area, status=2)
         if uid_qs.exists():
         if uid_qs.exists():
+            uid_ids = []
             for uid in uid_qs:
             for uid in uid_qs:
                 if uid.status == 2:
                 if uid.status == 2:
                     uid.status = 1
                     uid.status = 1
+                    uid_ids.append(uid.id)
             UIDModel.objects.bulk_update(uid_qs, fields=['status'])
             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 uid_qs.count()
         return 0
         return 0
 
 
@@ -256,6 +264,12 @@ class DownloadUIDFileView(View):
         area = request_dict.get('area', None)
         area = request_dict.get('area', None)
         quantity = int(request_dict.get('quantity', None))
         quantity = int(request_dict.get('quantity', None))
         fileType = request_dict.get('fileType', None)
         fileType = request_dict.get('fileType', None)
+        order_number = request_dict.get('order_number', None)
+        board = request_dict.get('board', None)
+        plan = request_dict.get('plan', None)
+        checksum = request_dict.get('checksum', None)
+        ic_model = request_dict.get('ic_model', None)
+        order_quantity = request_dict.get('order_quantity', None)
         response = ResponseObject()
         response = ResponseObject()
 
 
         # print(area)
         # print(area)
@@ -264,25 +278,44 @@ class DownloadUIDFileView(View):
         if token.code != 0:
         if token.code != 0:
             return response.json(token.code)
             return response.json(token.code)
 
 
-        if not area:
-            return response.json(444, 'area')
+        if not area or not order_number or not board or not plan or not checksum or not ic_model or not order_quantity or not fileType:
+            return response.json(444)
 
 
         area = int(area)
         area = int(area)
 
 
         if area >= 0 and quantity > 0:
         if area >= 0 and quantity > 0:
 
 
-            uid_qs = UserUIDModel.objects.filter(user__id=token.userID, uid__status=1, uid__area=area). \
-                values('uid__id', 'uid__uid', 'uid__mac', 'uid__uid_extra', 'uid__add_time', 'uid__update_time', 'uid__area')
-            count = uid_qs.count()
+            # 保存订单信息
+            order = {
+                'order_number': order_number,
+                'board': board,
+                'plan': plan,
+                'checksum': checksum,
+                'ic_model': ic_model,
+                'quantity': order_quantity
+            }
+
+            tmp = OrderTaskModel.objects.update_or_create(defaults={'order_number': order_number}, **order)
+            print(tmp)
+
+            order = OrderTaskModel.objects.filter(order_number=order_number)[0]
+
+            uid_qs = UserUIDModel.objects.filter(user__id=token.userID, uid__status=1, uid__area=area)
+
+            uid_values = uid_qs.values('uid__id', 'uid__uid', 'uid__mac', 'uid__uid_extra', 'uid__add_time', 'uid__update_time', 'uid__area')
+
+            count = uid_values.count()
             if count < quantity:
             if count < quantity:
                 return response.json(444, '设备UID不足')
                 return response.json(444, '设备UID不足')
 
 
-            if uid_qs.exists():
-                uid_qs = uid_qs[0:quantity]
+            if uid_values.exists():
+
+                uid_values = uid_values[0:quantity]
+                uid_qs = uid_qs[0: quantity]
                 if fileType == 'txt':
                 if fileType == 'txt':
-                    return self.download_txt(uid_qs)
+                    return self.download_txt(uid_values, uid_qs, order)
                 elif fileType == 'excel':
                 elif fileType == 'excel':
-                    return self.download_excel(uid_qs)
+                    return self.download_excel(uid_values)
                 else:
                 else:
                     return response.json(444, 'fileType')
                     return response.json(444, 'fileType')
             else:
             else:
@@ -290,37 +323,50 @@ class DownloadUIDFileView(View):
         else:
         else:
             return response.json(444, '222')
             return response.json(444, '222')
 
 
-    def download_txt(self, uid_qs):
+    def download_txt(self, uid_values, uid_qs, order):
         updates = []
         updates = []
+        updates_uid = []
         content = ''
         content = ''
-        for item in uid_qs:
+        now_time = int(time.time())
+        for i in range(len(uid_values)):
             # print(item)
             # print(item)
+            item = uid_values[i]
             mac: str = item['uid__mac']
             mac: str = item['uid__mac']
             index = mac.rfind(':')
             index = mac.rfind(':')
             tmp = mac[0:index] + ' ' + mac[index:]
             tmp = mac[0:index] + ' ' + mac[index:]
             content += tmp + ' '
             content += tmp + ' '
             content += item['uid__uid']
             content += item['uid__uid']
             content += '\r\n'
             content += '\r\n'
-            updates.append(UIDModel(
+            uidModel = UIDModel(
                 id=item['uid__id'],
                 id=item['uid__id'],
                 uid=item['uid__uid'],
                 uid=item['uid__uid'],
                 mac=item['uid__mac'],
                 mac=item['uid__mac'],
                 uid_extra=item['uid__uid_extra'],
                 uid_extra=item['uid__uid_extra'],
                 status=2,
                 status=2,
                 add_time=item['uid__add_time'],
                 add_time=item['uid__add_time'],
-                update_time=item['uid__update_time'],
+                update_time=now_time,
                 area=item['uid__area']
                 area=item['uid__area']
-            ))
+            )
+            updates.append(uidModel)
+
+            order_uid = OrderUIDModel(uid=uidModel, order=order, add_time=now_time, update_time=now_time)
+            updates_uid.append(order_uid)
+
             if len(updates) % 5000 == 0:
             if len(updates) % 5000 == 0:
                 UIDModel.objects.bulk_update(updates, fields=["status"])
                 UIDModel.objects.bulk_update(updates, fields=["status"])
+                OrderUIDModel.objects.bulk_create(updates_uid)
                 updates.clear()
                 updates.clear()
+                updates_uid.clear()
             # print(item['uid__uid'])
             # print(item['uid__uid'])
 
 
         if len(updates) > 0:
         if len(updates) > 0:
             UIDModel.objects.bulk_update(updates, fields=["status"])
             UIDModel.objects.bulk_update(updates, fields=["status"])
+            OrderUIDModel.objects.bulk_create(updates_uid)
             updates.clear()
             updates.clear()
+            updates_uid.clear()
 
 
         del updates
         del updates
+        del updates_uid
         content = content[0:len(content) - 1]
         content = content[0:len(content) - 1]
         response = StreamingHttpResponse(content)
         response = StreamingHttpResponse(content)
         response['Content-Type'] = 'application/octet-stream'
         response['Content-Type'] = 'application/octet-stream'

+ 37 - 1
Controller/UIDController.py

@@ -1,13 +1,16 @@
 #!/usr/bin/env python3
 #!/usr/bin/env python3
 # -*- coding: utf-8 -*-
 # -*- coding: utf-8 -*-
+import json
 import time
 import time
 
 
+from django.http import StreamingHttpResponse
 from django.utils.decorators import method_decorator
 from django.utils.decorators import method_decorator
 from django.views import View
 from django.views import View
 from django.views.decorators.csrf import csrf_exempt
 from django.views.decorators.csrf import csrf_exempt
 from django.db.models import Avg,Max,Min,Count,Sum, Q  #   引入函数
 from django.db.models import Avg,Max,Min,Count,Sum, Q  #   引入函数
 
 
 from Model.models import UIDModel, UserModel, UserUIDModel, HistoryUIDModel
 from Model.models import UIDModel, UserModel, UserUIDModel, HistoryUIDModel
+from Object.RedisObject import RedisObject
 from Object.ResponseObject import ResponseObject
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 from Object.TokenObject import TokenObject
 
 
@@ -44,6 +47,8 @@ class UIDView(View):
             return self.do_allot(request_dict, response)
             return self.do_allot(request_dict, response)
         elif operation == 'remove':
         elif operation == 'remove':
             return self.do_remove(request_dict, response)
             return self.do_remove(request_dict, response)
+        elif operation == 'download':
+            return self.download_txt(token, response)
         else:
         else:
             return response.json(309)
             return response.json(309)
 
 
@@ -136,12 +141,15 @@ class UIDView(View):
         datas = []
         datas = []
         if uid_qs.exists():
         if uid_qs.exists():
             uid_qs = uid_qs[0:quantity]
             uid_qs = uid_qs[0:quantity]
+            now_time = int(time.time())
             for item in uid_qs:
             for item in uid_qs:
                 item.status = 1
                 item.status = 1
                 item.update_time = time.time()
                 item.update_time = time.time()
                 user_uid = UserUIDModel()
                 user_uid = UserUIDModel()
                 user_uid.uid = item
                 user_uid.uid = item
                 user_uid.user = allot_user_qs[0]
                 user_uid.user = allot_user_qs[0]
+                user_uid.add_time = now_time
+                user_uid.update_time = now_time
                 datas.append(user_uid)
                 datas.append(user_uid)
                 updates.append(item)
                 updates.append(item)
 
 
@@ -155,7 +163,10 @@ class UIDView(View):
                 UIDModel.objects.bulk_update(updates, fields=['status', 'update_time'])
                 UIDModel.objects.bulk_update(updates, fields=['status', 'update_time'])
                 datas.clear()
                 datas.clear()
                 updates.clear()
                 updates.clear()
-
+            redisObject = RedisObject()
+            values = uid_qs.values('uid')
+            print(values)
+            redisObject.set_data(key=token.token, val=json.dumps(list(values)), expire=3600)
             del datas
             del datas
             del updates
             del updates
             return response.json(0)
             return response.json(0)
@@ -235,3 +246,28 @@ class UIDView(View):
             return response.json(0)
             return response.json(0)
         else:
         else:
             return response.json(173)
             return response.json(173)
+
+    def download_txt(self, token, response):
+
+        redisObject = RedisObject()
+        uid_qs = redisObject.get_data(key=token.token)
+
+        if uid_qs is False:
+            return response.json(308)
+
+        uid_qs = json.loads(uid_qs)
+        content = ''
+        for item in uid_qs:
+            # print(item)
+            content += item['uid']
+            content += '\r\n'
+
+        redisObject.del_data(key=token.token)
+
+        content = content[0:len(content) - 1]
+        response = StreamingHttpResponse(content)
+        response['Content-Type'] = 'application/octet-stream'
+        filename = 'uid_need_to_set_up_push.txt'
+        response['Content-Disposition'] = 'attachment;filename=' + filename
+
+        return response

+ 29 - 0
Model/models.py

@@ -37,6 +37,8 @@ class UserUIDModel(models.Model):
     id = models.AutoField(primary_key=True)
     id = models.AutoField(primary_key=True)
     user = models.ForeignKey(UserModel, to_field='id', on_delete=models.CASCADE, verbose_name='关联用户表id')
     user = models.ForeignKey(UserModel, to_field='id', on_delete=models.CASCADE, verbose_name='关联用户表id')
     uid = models.ForeignKey(UIDModel, to_field='id', on_delete=models.CASCADE, verbose_name='关联uid表id')
     uid = models.ForeignKey(UIDModel, to_field='id', on_delete=models.CASCADE, verbose_name='关联uid表id')
+    add_time = models.IntegerField(default=0, verbose_name='添加时间')
+    update_time = models.IntegerField(default=0, verbose_name='更新时间')
 
 
     class Meta:
     class Meta:
         verbose_name = '用户与UID的关联表'
         verbose_name = '用户与UID的关联表'
@@ -100,3 +102,30 @@ class MacModel(models.Model):
         db_table = 'tb_mac'
         db_table = 'tb_mac'
 
 
 
 
+class OrderTaskModel(models.Model):
+    id = models.AutoField(primary_key=True)
+    order_number = models.CharField(max_length=32, unique=True, verbose_name='订单号')
+    board = models.CharField(max_length=32, verbose_name='主板')
+    plan = models.CharField(max_length=32, verbose_name='配置方案')
+    checksum = models.CharField(max_length=32, verbose_name='校验和')
+    ic_model = models.CharField(max_length=32, verbose_name='ic型号')
+    quantity = models.IntegerField(default=0, verbose_name='通知单上的生成数量')
+
+    class Meta:
+        db_table = 'order_task'
+        verbose_name = '订单任务表'
+        verbose_name_plural = verbose_name
+
+
+class OrderUIDModel(models.Model):
+    id = models.AutoField(primary_key=True)
+    uid = models.ForeignKey(UIDModel, to_field='id', on_delete=models.CASCADE, verbose_name='关联uid表')
+    order = models.ForeignKey(OrderTaskModel, to_field='id', on_delete=models.CASCADE, verbose_name='关联订单任务表')
+    add_time = models.IntegerField(default=0, verbose_name='添加时间')
+    update_time = models.IntegerField(default=0, verbose_name='更新时间')
+
+    class Meta:
+        db_table = 'order_uid'
+        verbose_name = '订单与uid关联表'
+        verbose_name_plural = verbose_name
+

+ 1 - 4
Object/RedisObject.py

@@ -25,10 +25,7 @@ db=3  -> 统计在线人数用
 
 
 class RedisObject:
 class RedisObject:
 
 
-    def __init__(self, db=0,SERVER_HOST = SERVER_HOST):
-        if db == 3:
-            if SERVER_TYPE != 'Ansjer.formal_settings':
-                db = 4
+    def __init__(self, db=0, SERVER_HOST = SERVER_HOST):
         self.POOL = redis.ConnectionPool(host=SERVER_HOST, port=6379, db=db)
         self.POOL = redis.ConnectionPool(host=SERVER_HOST, port=6379, db=db)
         self.CONN = redis.Redis(connection_pool=self.POOL)
         self.CONN = redis.Redis(connection_pool=self.POOL)
 
 

+ 2 - 0
Object/ResponseObject.py

@@ -40,6 +40,7 @@ class ResponseObject(object):
             175: 'mac地址已用完',
             175: 'mac地址已用完',
             305: '令牌格式是错误的,相关参数是不存在的!',
             305: '令牌格式是错误的,相关参数是不存在的!',
             307: '令牌已过期!',
             307: '令牌已过期!',
+            308: '此次下载已失效',
             309: '你没有权限访问',
             309: '你没有权限访问',
             404: 'You don not have permission to access this!',
             404: 'You don not have permission to access this!',
             444: '请确认参数的正确性!',
             444: '请确认参数的正确性!',
@@ -78,6 +79,7 @@ class ResponseObject(object):
             175: 'MAC address has been used up',
             175: 'MAC address has been used up',
             305: 'The Token format is wrong and the related parameter is None!',
             305: 'The Token format is wrong and the related parameter is None!',
             307: 'The Token has expired!',
             307: 'The Token has expired!',
+            308: 'This download has expired!',
             309: 'You have no access',
             309: 'You have no access',
             404: 'You don not have permission to access this!',
             404: 'You don not have permission to access this!',
             444: 'Please confirm the correctness of the parameters!',
             444: 'Please confirm the correctness of the parameters!',

+ 1 - 1
Service/LogMiddleware.py

@@ -46,7 +46,7 @@ def add_log(request, response):
     request_path = request.path.strip().strip('/')
     request_path = request.path.strip().strip('/')
     print(request_path)
     print(request_path)
     jsonObject = {}
     jsonObject = {}
-    if request_path == 'download':
+    if request_path == 'download' or request_path == 'uid/download':
         if response.status_code != 200:
         if response.status_code != 200:
             return
             return
     else:
     else: