Ver código fonte

MAC+序列号=CSV

linhaohong 1 ano atrás
pai
commit
d4925e6f0c
1 arquivos alterados com 51 adições e 20 exclusões
  1. 51 20
      Controller/SerialNumberController.py

+ 51 - 20
Controller/SerialNumberController.py

@@ -655,11 +655,22 @@ class SerialNumberView(View):
 
     @staticmethod
     def generate_mac_and_serial_numbers(request_dict, response):
+        """
+        生成mac_serial.csv文件
+        :param request_dict: 请求
+        :param quantity: 生成数量
+        :param user_id: 账号ID
+        :param response: 响应
+        :return: response
+        """
         # 获取生成数量
         quantity = int(request_dict.get('quantity', 0))
         # 获取公司类型
         company_id = int(request_dict.get('company_id', 0))
-        if quantity == 0 or company_id == 0:
+        # 获取账号ID
+        user_id = int(request_dict.get('user_id', 0))
+
+        if not (quantity and company_id and user_id):
             return response.json(444)
 
         # 获取mac地址查询集
@@ -669,33 +680,54 @@ class SerialNumberView(View):
         mac = mac_qs[0]['value']
 
         # 获取序列号地址查询集
-        serial_qs = CompanySerialModel.objects.filter(status=1,company_id=company_id)[:quantity]
+        user_serial_numbers = UserSerialNumberModel.objects.filter(
+            user__id=user_id,
+            serial_number__status=1,
+            serial_number__use_status=1
+        ).select_related('serial_number')[:quantity]
+
         # 判断序列号地址是否充足
-        if len(serial_qs) < quantity:
-            return response.json(444,'序列号不足')
+        if len(user_serial_numbers) < quantity:
+            return response.json(444, '序列号不足')
 
         now_time = int(time.time())
+        #需要更新的序列号表
+        company_serial_numbers_list = []
+        #保存到CSV的数据
+        csv_data = []
+        # 收集需要更新的序列号对象
+        serials_to_update = []
+
+        for user_serial in user_serial_numbers:
+            serial = user_serial.serial_number
+            company_serial_numbers_list.append(serial.serial_number)
+            next_mac = CommonService.updateMac(mac)
+
+            if company_id == 1:
+                csv_serial_number = serial.serial_number + '11A'
+            elif company_id == 2:
+                csv_serial_number = serial.serial_number + '11L'
+            # company_id其余情况不加后缀
+            else:
+                csv_serial_number = serial.serial_number
 
-        # 保存到mac_serial.csv
+            csv_data.append([next_mac, csv_serial_number])
+            mac = next_mac
+            serial.use_status = 2
+            serials_to_update.append(serial)
+
+        # 批量写入CSV文件
         with open('mac_serial.csv', 'w', newline='') as csvfile:
             writer = csv.writer(csvfile)
             writer.writerow(['MAC', 'SN'])
+            writer.writerows(csv_data)
 
-            for i, serial in enumerate(serial_qs):
-                next_mac = CommonService.updateMac(mac)
-                if company_id == 1:
-                    csv_serial_number = serial.serial_number + '11A'
-                elif company_id == 2:
-                    csv_serial_number = serial.serial_number + '11L'
-                else:# 其他情况 company_id = X
-                    csv_serial_number = serial.serial_number
-                writer.writerow([next_mac, csv_serial_number])
-                mac = next_mac
-
-                serial.status = 2
-                serial.update_time = now_time
-                serial.save()
+        # 批量更新erialNumberModel
+        SerialNumberModel.objects.bulk_update(serials_to_update, ['use_status'])
 
+        # 更新CompanySerialModel表
+        CompanySerialModel.objects.filter(serial_number__in=company_serial_numbers_list)\
+            .update(status=2, update_time=now_time)
         next_mac = CommonService.updateMac(mac)
         mac_qs.update(value=next_mac, update_time=now_time)
 
@@ -705,4 +737,3 @@ class SerialNumberView(View):
 
 
 
-