瀏覽代碼

排查序列号重复记录日志接口

zhangdongming 1 年之前
父節點
當前提交
faf8543973
共有 3 個文件被更改,包括 126 次插入0 次删除
  1. 2 0
      Ansjer/urls.py
  2. 105 0
      Controller/UserDevice/SerialNumberCheckController.py
  3. 19 0
      Model/models.py

+ 2 - 0
Ansjer/urls.py

@@ -32,6 +32,7 @@ from Controller.SensorGateway import SensorGatewayController, EquipmentFamilyCon
 from django.urls import include
 
 from Controller.UserDevice import UserDeviceShareController
+from Controller.UserDevice import SerialNumberCheckController
 
 urlpatterns = [
     re_path(r'init/(?P<operation>.*)', InitController.InitView.as_view()),
@@ -372,6 +373,7 @@ urlpatterns = [
     re_path(r'^weather/(?P<operation>.*)$', WeatherControl.WeatherView.as_view()),
     re_path(r'^alexaApi/', include("Ansjer.server_urls.alexa_url")),
     re_path('customSubscription/(?P<operation>.*)', UserSubscriptionController.UserSubscriptionControllerView.as_view()),
+    re_path(r'^basic/serialNo/(?P<operation>.*)', SerialNumberCheckController.SerialNumberView.as_view()),
 
     # 后台界面接口 -----------------------------------------------------
     # 用户登录信息等

+ 105 - 0
Controller/UserDevice/SerialNumberCheckController.py

@@ -0,0 +1,105 @@
+# -*- encoding: utf-8 -*-
+"""
+@File    : SerialNumberCheckController.py
+@Time    : 2024/6/20 13:33
+@Author  : stephen
+@Email   : zhangdongming@asj6.wecom.work
+@Software: PyCharm
+"""
+import time
+
+from django.http import QueryDict
+from django.views import View
+
+from Ansjer.config import LOGGER
+from Model.models import SerialNumberCheckLog
+from Object.ResponseObject import ResponseObject
+
+
+class SerialNumberView(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 delete(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        operation = kwargs.get('operation')
+        delete = QueryDict(request.body)
+        if not delete:
+            delete = request.GET
+        return self.validation(delete, request, operation)
+
+    def put(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        operation = kwargs.get('operation')
+        put = QueryDict(request.body)
+        return self.validation(put, request, operation)
+
+    def validation(self, request_dict, request, operation):
+        response = ResponseObject('cn')
+        if operation == 'serialNumberCheck':
+            return self.save_serial_number_log(request_dict, response)
+
+    @classmethod
+    def save_serial_number_log(cls, request_dict, response):
+        """
+        保存APP扫码工具排查序列号重复日志
+        @param request_dict: 序列号、手机型号、类型
+        @param response: 响应类
+        @return:
+        """
+        serial_no = request_dict.get("serialNo", None)
+        phone_model = request_dict.get("phoneModel", None)
+        if not serial_no:
+            return response.json(444)
+        p_type = int(request_dict.get('type', 0))
+        n_time = int(time.time())
+        try:
+            dict_type = {'1': '三乡总装', '2': '三乡包装', '3': '三乡返工', '4': '三乡管理', '5': '珠海包装', '6': '珠海管理'}
+            first_serial = serial_no[:6]
+            # 查询当前工位是否扫过序列号
+            first_serial_qs = SerialNumberCheckLog.objects.filter(serial_number=first_serial)
+            # 工位类型,1:三乡总装,2:三乡包装,3:三乡返工,4:三乡管理,5:珠海包装
+            if p_type == 4 or p_type == 6:
+                first_serial_qs = first_serial_qs.filter(type=5) if p_type == 6 else first_serial_qs.exclude(type=5)
+                first_serial_qs = first_serial_qs.order_by('type', '-created_time')
+                if not first_serial_qs.exists():
+                    return response.json(173)
+                logs = []
+                # 管理分类可查询当前序列号扫码记录
+                for item in first_serial_qs:
+                    log_dict = {'fullSerialNumber': item.full_serial_number, 'count': item.count, 'type': item.type,
+                                'createdTime': item.created_time, 'stationName': dict_type[str(item.type)],
+                                'phoneModel': item.phone_model}
+                    logs.append(log_dict)
+                result = {'logs': logs}
+                return response.json(0, result)
+            first_serial_qs = first_serial_qs.filter(type=p_type)
+            if first_serial_qs.exists():
+                # APP扫码工具记录+1
+                params = {'serial_number': first_serial, 'created_time': n_time,
+                          'full_serial_number': serial_no, 'type': p_type, 'phone_model': phone_model}
+                SerialNumberCheckLog.objects.create(**params)
+                # 返回当前序列号数据结构
+                log_dict = {'fullSerialNumber': first_serial_qs[0].full_serial_number,
+                            'count': first_serial_qs[0].count, 'type': first_serial_qs[0].type,
+                            'createdTime': first_serial_qs[0].created_time,
+                            'stationName': dict_type[str(first_serial_qs[0].type)],
+                            'phoneModel': first_serial_qs[0].phone_model}
+                result = {'logs': [log_dict]}
+                return response.json(174, result)
+            else:
+                params = {'serial_number': first_serial, 'created_time': n_time,
+                          'full_serial_number': serial_no, 'type': p_type, 'phone_model': phone_model}
+                SerialNumberCheckLog.objects.create(**params)
+                return response.json(0)
+        except Exception as e:
+            LOGGER.error('APP扫码工具保存日志异常:errLine:{}, errMsg:{}'
+                         .format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(5)

+ 19 - 0
Model/models.py

@@ -4844,3 +4844,22 @@ class UserEmailSubscriptions(models.Model):
     class Meta:
         db_table = 'user_email_subscriptions'
         verbose_name = '用户邮件订阅记录表'
+
+
+class SerialNumberCheckLog(models.Model):
+    id = models.AutoField(primary_key=True, verbose_name='自增id')
+    serial_number = models.CharField(blank=True, db_index=True, max_length=20, default='',
+                                     verbose_name='6序列号')
+    full_serial_number = models.CharField(blank=True, db_index=True, max_length=20, default='',
+                                          verbose_name='完成序列号')
+    count = models.IntegerField(default=1, verbose_name='计算')
+    # 工位类型,1:三乡总装,2:三乡包装,3:三乡返工,4:三乡管理,5:珠海包装
+    type = models.SmallIntegerField(default=0, verbose_name='分类')
+    phone_model = models.CharField(max_length=64, default='', verbose_name='手机型号')
+    created_time = models.IntegerField(default=0, verbose_name='创建时间')
+
+    class Meta:
+        db_table = 'serial_number_check_log'
+        verbose_name = '序列号检查日志'
+        verbose_name_plural = verbose_name
+