|
@@ -16,11 +16,13 @@ from django.views.decorators.csrf import csrf_exempt
|
|
|
from django.db import transaction
|
|
|
|
|
|
from AnsjerUIDManage.config import BASE_DIR
|
|
|
-from Model.models import UIDModel, UserUIDModel, UserModel, LogModel, MacModel, OrderTaskModel, OrderUIDModel
|
|
|
+from Model.models import UIDModel, UserUIDModel, UserModel, LogModel, MacModel, OrderTaskModel, OrderUIDModel, \
|
|
|
+ SerialNumberModel, OrderSerialNumberModel
|
|
|
from Object.RedisObject import RedisObject
|
|
|
from Object.TokenObject import TokenObject
|
|
|
from Object.ResponseObject import ResponseObject
|
|
|
from Service.CommonService import CommonService
|
|
|
+from bulk_update.helper import bulk_update
|
|
|
|
|
|
|
|
|
class UploadUIDFileView(View):
|
|
@@ -526,3 +528,161 @@ class DownloadUIDFileView(View):
|
|
|
time.localtime()) + '.zip'
|
|
|
return response
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+class DownloadSerialNumberFileView(View):
|
|
|
+
|
|
|
+ @method_decorator(csrf_exempt)
|
|
|
+ def dispatch(self, request, *args, **kwargs):
|
|
|
+ return super(DownloadSerialNumberFileView, self).dispatch(request, *args, **kwargs)
|
|
|
+
|
|
|
+ def get(self, request, *args, **kwargs):
|
|
|
+ request.encoding = 'utf-8'
|
|
|
+ request_dict = request.GET
|
|
|
+ return self.validate(request_dict)
|
|
|
+
|
|
|
+ def post(self, request, *args, **kwargs):
|
|
|
+ request.encoding = 'utf-8'
|
|
|
+ request_dict = request.POST
|
|
|
+ return self.validate(request_dict)
|
|
|
+
|
|
|
+ def validate(self, request_dict):
|
|
|
+ token = request_dict.get('token', None)
|
|
|
+ area = request_dict.get('area', None)
|
|
|
+ quantity = int(request_dict.get('quantity', 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()
|
|
|
+
|
|
|
+ # print(area)
|
|
|
+ # print(quantity)
|
|
|
+ token = TokenObject(token)
|
|
|
+ if token.code != 0:
|
|
|
+ return response.json(token.code)
|
|
|
+
|
|
|
+ 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)
|
|
|
+
|
|
|
+ if area >= 0 and quantity > 0:
|
|
|
+
|
|
|
+ # 保存订单信息
|
|
|
+ now_time = int(time.time())
|
|
|
+ order = {
|
|
|
+ 'order_number': order_number,
|
|
|
+ 'board': board,
|
|
|
+ 'plan': plan,
|
|
|
+ 'checksum': checksum,
|
|
|
+ 'ic_model': ic_model,
|
|
|
+ 'quantity': order_quantity,
|
|
|
+ 'add_time': now_time
|
|
|
+ }
|
|
|
+
|
|
|
+ tmp = OrderTaskModel.objects.create(**order)
|
|
|
+ print(tmp)
|
|
|
+
|
|
|
+ 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()
|
|
|
+ if count < quantity:
|
|
|
+ return response.json(444, '序列号不足')
|
|
|
+
|
|
|
+ if sn_qs.exists():
|
|
|
+
|
|
|
+ sn_qs = sn_qs[0: quantity]
|
|
|
+ if fileType == 'txt':
|
|
|
+ # return self.download_txt(uid_values, uid_qs, order)
|
|
|
+ # return self.download_excel(uid_values, order)
|
|
|
+ return self.download_zip(sn_qs, order)
|
|
|
+ else:
|
|
|
+ return response.json(444, 'fileType')
|
|
|
+ else:
|
|
|
+ return response.json(444, '111')
|
|
|
+ else:
|
|
|
+ return response.json(444, '222')
|
|
|
+
|
|
|
+
|
|
|
+ def download_zip(self, sn_qs, order):
|
|
|
+ dir_name = 'static/' + time.strftime('%Y_%m_%d_%H_%M_%S', time.localtime())
|
|
|
+ path = '/'.join((BASE_DIR, dir_name)).replace('\\', '/') + '/'
|
|
|
+ if not os.path.exists(path):
|
|
|
+ os.mkdir(path)
|
|
|
+
|
|
|
+ filename = time.strftime('_%Y_%m_%d_%H_%M_%S', time.localtime())
|
|
|
+ txt_filename = 'SerialNumber' + filename + '.txt'
|
|
|
+ excel_filename = 'SerialNumber' + filename + '.xls'
|
|
|
+
|
|
|
+ txt_file = open(path + txt_filename, 'w+')
|
|
|
+ workbook = xlwt.Workbook(encoding='utf-8')
|
|
|
+ sheet1 = workbook.add_sheet('SerialNumber')
|
|
|
+ num = 0
|
|
|
+
|
|
|
+ updates = []
|
|
|
+ updates_serial_number = []
|
|
|
+ content = ''
|
|
|
+ now_time = int(time.time())
|
|
|
+ for i in range(len(sn_qs)):
|
|
|
+ # print(item)
|
|
|
+ item = sn_qs[i]
|
|
|
+ serial_number = item.serial_number
|
|
|
+ sheet1.write(num, 0, serial_number)
|
|
|
+ num += 1
|
|
|
+ content += serial_number.strip()
|
|
|
+ content += '\n'
|
|
|
+
|
|
|
+ serialNumberModel = SerialNumberModel(
|
|
|
+ id=item.id,
|
|
|
+ serial_number = item.serial_number,
|
|
|
+ status=item.status,
|
|
|
+ use_status=1,
|
|
|
+ p2p=item.p2p,
|
|
|
+ add_time=item.add_time
|
|
|
+ )
|
|
|
+ updates.append(serialNumberModel)
|
|
|
+
|
|
|
+ order_serial_number = OrderSerialNumberModel(serial_number=item, order=order, add_time=now_time, update_time=now_time)
|
|
|
+ updates_serial_number.append(order_serial_number)
|
|
|
+
|
|
|
+ if len(updates) % 5000 == 0:
|
|
|
+ bulk_update(updates)
|
|
|
+ OrderSerialNumberModel.objects.bulk_create(updates_serial_number)
|
|
|
+ updates.clear()
|
|
|
+ updates_serial_number.clear()
|
|
|
+ # print(item['uid__uid'])
|
|
|
+
|
|
|
+ if len(updates) > 0:
|
|
|
+ bulk_update(updates)
|
|
|
+ OrderSerialNumberModel.objects.bulk_create(updates_serial_number)
|
|
|
+ updates.clear()
|
|
|
+ updates_serial_number.clear()
|
|
|
+
|
|
|
+ del updates
|
|
|
+ del updates_serial_number
|
|
|
+ content = content[0:len(content) - 1]
|
|
|
+ txt_file.write(content)
|
|
|
+ txt_file.close()
|
|
|
+
|
|
|
+ workbook.save(path + excel_filename)
|
|
|
+
|
|
|
+ zip_name = path[0:path.rfind('/')] + '.zip'
|
|
|
+ return self.get_zip(path, os.listdir(path), zip_name)
|
|
|
+
|
|
|
+ def get_zip(self, path, files, zip_name):
|
|
|
+ zp = zipfile.ZipFile(zip_name, 'w', zipfile.ZIP_DEFLATED)
|
|
|
+ for file in files:
|
|
|
+ zp.write(filename=(path + file), arcname=str(file))
|
|
|
+ zp.close()
|
|
|
+
|
|
|
+ response = StreamingHttpResponse(open(zip_name, 'rb'))
|
|
|
+ response['content_type'] = "application/octet-stream"
|
|
|
+ response['Content-Disposition'] = 'attachment; filename=SerialNumber' + time.strftime('_%Y_%m_%d_%H_%M_%S',
|
|
|
+ time.localtime()) + '.zip'
|
|
|
+ return response
|