Răsfoiți Sursa

设备绑定产品方案功能

linhaohong 3 luni în urmă
părinte
comite
b66997fb65
3 a modificat fișierele cu 89 adăugiri și 3 ștergeri
  1. 2 1
      Ansjer/urls.py
  2. 72 0
      Controller/IncomeProductsController.py
  3. 15 2
      Model/models.py

+ 2 - 1
Ansjer/urls.py

@@ -26,7 +26,7 @@ from Controller import FeedBack, EquipmentOTA, EquipmentInfo, AdminManage, AppIn
     DetectControllerV2, PcInfo, PctestController, DeviceDebug, PaymentCycle, \
     DeviceLogController, CouponController, AiController, ShadowController, AppAccountManagement, InitController, \
     WeatherControl, SmartReplyController, InAppPurchaseController, DeviceCommonController, TimeAlbumController, \
-    ShopifyController
+    ShopifyController, IncomeProductsController
 from Controller.Cron import CronTaskController
 from Controller.CustomCustomer import CustomCustomerController
 from Controller.MessagePush import EquipmentMessagePush
@@ -296,6 +296,7 @@ urlpatterns = [
     # 获取APN配置信息
     re_path('APNConfig/(?P<operation>.*)', APNConfigController.APNConfigView.as_view()),
     re_path(r'^api/device/custom/(?P<operation>.*)$', DeviceCustomUIDController.DeviceCustomUIDView.as_view()),
+    re_path(r'^productInformation/(?P<operation>.*)$', IncomeProductsController.IncomeProductsView.as_view()),
 
     # 后台界面接口 -------------------------------------------------------------------------------------------------------
     # 登录,用户信息,权限

+ 72 - 0
Controller/IncomeProductsController.py

@@ -0,0 +1,72 @@
+import time
+
+from django.views import View
+
+from Model.models import DeviceScheme
+from Object.RedisObject import RedisObject
+from Service.CommonService import CommonService
+from Ansjer.config import LOGGER
+
+class IncomeProductsView(View):
+    def get(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        operation = kwargs.get('operation')
+        return self.validation(request.GET, request, operation)
+
+    def post(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        operation = kwargs.get('operation')
+        return self.validation(request.POST, request, operation)
+
+    def validation(self, request_dict, request, operation):
+        token_code, user_id, response = CommonService.verify_token_get_user_id(request_dict, request)
+        if operation == 'income':  # 设备关联产品方案
+            return self.income_device_scheme(request_dict, response)
+        else:
+            return response.json(414)
+
+    @staticmethod
+    def income_device_scheme(request_dict, response):
+        """
+        设备关联产品方案
+        @param request_dict:
+        @param response:
+        @return:
+        """
+        storage_code = request_dict.get("storageCode", None)
+        serial_number = request_dict.get("serialNumber", None)
+        phone_model = request_dict.get("phoneModel", None)
+
+        if not all([storage_code, serial_number, phone_model]):
+            return response.json(444)
+
+        serial_number = serial_number[0:9]
+        redis = RedisObject()
+        lock = redis.get_data(f"income_device_scheme_{storage_code}_{serial_number}")
+        if lock:
+            return response.json(10, '重复扫码')
+        redis.set_data(f"income_device_scheme_{storage_code}_{serial_number}", 1, 60)
+
+        try:
+            LOGGER.info(f"设备关联产品方案, storageCode: {storage_code}, serialNumber: {serial_number}")
+            device_scheme_qs = DeviceScheme.objects.filter(serial_number=serial_number)
+            if device_scheme_qs.exists():
+                storage_code = device_scheme_qs.first().storage_code
+                LOGGER.info(f"设备关联产品方案, serialNumber已存在, storageCode: {storage_code}, serialNumber: {serial_number}")
+                redis.del_data(f"income_device_scheme_{storage_code}_{serial_number}")
+                return response.json(173, f"数据已存在, storage_code为: {storage_code}")
+
+            now_time = int(time.time())
+
+            DeviceScheme.objects.create(storage_code=storage_code, serial_number=serial_number,
+                                        phone_model=phone_model, created_time=now_time,
+                                        updated_time=now_time)
+
+            LOGGER.info(f"设备关联产品方案, serialNumber录入成功, storageCode: {storage_code}, serialNumber: {serial_number}")
+
+            return response.json(0)
+
+        except Exception as e:
+            redis.del_data(f"income_device_scheme_{storage_code}_{serial_number}")
+            print(e)
+            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))

+ 15 - 2
Model/models.py

@@ -5852,7 +5852,7 @@ class DictItemI18n(models.Model):
 class ProductsScheme(models.Model):
     id = models.AutoField(primary_key=True, verbose_name='自增标记ID')
     order_number = models.CharField(max_length=100, verbose_name='关联制作单号', blank=True)
-    storage_code = models.CharField(max_length=50,unique=True,verbose_name='入库编码')
+    storage_code = models.CharField(max_length=50, unique=True, verbose_name='入库编码')
     device_type = models.SmallIntegerField(default=0, verbose_name='设备类型')
     flash = models.CharField(max_length=50, verbose_name='闪存', blank=True)
     ddr = models.CharField(max_length=50, verbose_name='DDR', blank=True)
@@ -5865,10 +5865,23 @@ class ProductsScheme(models.Model):
     remark = models.TextField(blank=True, verbose_name="备注")
     created_time = models.IntegerField(default=0, verbose_name='创建时间')
     created_by = models.CharField(max_length=64, verbose_name='创建人')
-    updated_time = models.IntegerField(default=0, verbose_name='创建时间')
+    updated_time = models.IntegerField(default=0, verbose_name='更新时间')
     updated_by = models.CharField(max_length=64, blank=True, verbose_name="更新人")
     deleted = models.BooleanField(default=False, verbose_name='逻辑删除')
 
     class Meta:
         db_table = 'products_scheme'
         verbose_name = "产品方案"
+
+
+class DeviceScheme(models.Model):
+    id = models.AutoField(primary_key=True, verbose_name='自增标记ID')
+    serial_number = models.CharField(max_length=20, unique=True, default='', verbose_name='序列号')
+    phone_model = models.CharField(max_length=64, default='', verbose_name='手机型号')
+    storage_code = models.CharField(max_length=50, db_index=True, verbose_name='入库编码')
+    created_time = models.IntegerField(default=0, verbose_name='创建时间')
+    updated_time = models.IntegerField(default=0, verbose_name='更新时间')
+
+    class Meta:
+        db_table = 'device_scheme'
+        verbose_name = "设备方案"