Parcourir la source

生成序列号

locky il y a 4 ans
Parent
commit
1b5f6d6cfa
4 fichiers modifiés avec 122 ajouts et 3 suppressions
  1. 3 2
      AnsjerUIDManage/urls.py
  2. 63 0
      Controller/SerialNumberController.py
  3. 1 1
      Model/models.py
  4. 55 0
      Service/AlgorithmService.py

+ 3 - 2
AnsjerUIDManage/urls.py

@@ -17,7 +17,7 @@ from django.contrib import admin
 from django.urls import path, re_path
 
 from Controller import UserController, FileController, UIDController, LogController, SalesController, \
-    OrderTaskController, HistoryUIDController
+    OrderTaskController, HistoryUIDController, SerialNumberController
 
 urlpatterns = [
     path('admin/', admin.site.urls),
@@ -29,6 +29,7 @@ urlpatterns = [
     path('upload', FileController.UploadUIDFileView.as_view()),
     path('download', FileController.DownloadUIDFileView.as_view()),
     path('sales', SalesController.SalesView.as_view()),
-    path('device/online', SalesController.DeviceOnlineView.as_view())
+    path('device/online', SalesController.DeviceOnlineView.as_view()),
 
+    re_path('serialNumber/(?P<operation>.*)', SerialNumberController.SerialNumberView.as_view()),
 ]

+ 63 - 0
Controller/SerialNumberController.py

@@ -0,0 +1,63 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+import time
+
+from django.db import transaction
+from django.views import View
+
+from Model.models import SerialNumberModel
+from Object.ResponseObject import ResponseObject
+from Service.AlgorithmService import AlgorithmBaseOn35
+
+
+class SerialNumberView(View):
+
+    def get(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        operation = kwargs.get('operation', None)
+        request_dict = request.GET
+        return self.validate(request_dict, operation, request)
+
+    def post(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        operation = kwargs.get('operation', None)
+        request_dict = request.POST
+        return self.validate(request_dict, operation, request)
+
+    def validate(self, request_dict, operation, request):
+        response = ResponseObject()
+
+        if operation == 'create':
+            return self.do_create(request_dict, response)
+        else:
+            return response.json(404)
+
+    def do_create(self, request_dict, response):
+        quantity = int(request_dict.get('quantity', 0))
+        p2p = int(request_dict.get('p2p', 0))
+
+        if not quantity:
+            return response.json(444)
+
+        try:
+            try:
+                sum = SerialNumberModel.objects.last().id
+            except:
+                sum = 0
+            serial_number_bulk = []
+            now_time = int(time.time())
+            algorithm = AlgorithmBaseOn35()
+            for i in range(quantity):
+                serial_number = algorithm.getLetter(sum)
+                sum += 1    # sum每次递增1
+                # 前面补0至六位
+                serial_number = (6-len(serial_number))*'0' + serial_number
+                serial_number_bulk.append(SerialNumberModel(serial_number=serial_number, add_time=now_time, p2p=p2p))
+            # 开启事务写入
+            with transaction.atomic():
+                SerialNumberModel.objects.bulk_create(serial_number_bulk)
+            return response.json(0)
+        except Exception as e:
+            print(e)
+            return response.json(500, repr(e))

+ 1 - 1
Model/models.py

@@ -137,7 +137,7 @@ class SerialNumberModel(models.Model):
     id = models.AutoField(primary_key=True)
     serial_number = models.CharField(max_length=9, db_index=True, unique=True, verbose_name='序列号')
     status = models.SmallIntegerField(default=1, verbose_name='可用状态。0:不可用,1:可用')
-    use_status = models.SmallIntegerField(default=0, verbose_name='使用状态, 0: 未使用, 1: 已分配')
+    use_status = models.SmallIntegerField(default=0, db_index=True, verbose_name='使用状态, 0: 未使用, 1: 已分配')
     p2p = models.SmallIntegerField(default=0, verbose_name='p2p类型。0:无,1:宸云,2:tutk')
     add_time = models.IntegerField(default=0, verbose_name='添加时间')
 

+ 55 - 0
Service/AlgorithmService.py

@@ -0,0 +1,55 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+import math
+
+
+class AlgorithmBaseOn35:
+
+    letters = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
+               'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
+               'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
+               'U', 'V', 'W', 'X', 'Y', 'Z']
+
+    len1 = len(letters)
+
+    def getLetter(self, number):
+        tmp = int(number / self.len1)
+        current = number % self.len1
+
+        if tmp >= self.len1:
+            return self.getLetter(tmp) + self.letters[current]
+        else:
+            return self.letters[tmp] + self.letters[current]
+
+    def add(self, a, b):
+        sum = a + b
+        serial_number = self.getLetter(sum)
+        return serial_number
+
+    def __findLetter(self, char):
+        for i in range(self.len1):
+            if char == self.letters[i]:
+                return i
+        return -1
+
+    def __drop0(self, text):
+        char = text[0]
+        if char == '0':
+            return self.__drop0(text[1:])
+        else:
+            return text
+
+    def to10(self, serial):
+        serial = self.__drop0(serial)
+        print(serial)
+        len1 = len(serial)
+        print(len1)
+        sum = 0
+        for char in serial:
+            tmp = self.__findLetter(char)
+            if tmp == -1:
+                return None
+            print(tmp)
+            sum += (tmp * math.pow(35, len1 - 1))
+            len1 -= 1
+        return sum