Explorar el Código

查询和返回制作单信息

locky hace 3 meses
padre
commit
5886fd6a97
Se han modificado 2 ficheros con 55 adiciones y 3 borrados
  1. 28 3
      AdminController/LogManagementController.py
  2. 27 0
      Service/CommonService.py

+ 28 - 3
AdminController/LogManagementController.py

@@ -12,7 +12,7 @@ from Object.TokenObject import TokenObject
 from Service.CommonService import CommonService
 from Model.models import Device_Info, RequestRecordModel, iotdeviceInfoModel, Access_Log, DeviceLogModel, LogModel, \
     AppLogModel, AppScannedSerial, StsFrequency, DeviceDomainRegionModel, IPAddr, CountryModel, RegionModel, \
-    AbnormalEvent, DeviceTypeModel, AbnormalEventCode
+    AbnormalEvent, DeviceTypeModel, AbnormalEventCode, DeviceScheme, ProductsScheme
 from Ansjer.config import REGION_NAME, ACCESS_KEY_ID, SECRET_ACCESS_KEY, LOG_BUCKET
 
 
@@ -541,6 +541,7 @@ class LogManagementView(View):
     @staticmethod
     def getDeviceAbnormalEvent(request_dict, response):
         uid = request_dict.get('uid', None)
+        storage_code = request_dict.get('storageCode', None)
         device_type = request_dict.get('deviceType', None)
         version = request_dict.get('version', None)
         event_type = request_dict.get('eventType', None)
@@ -559,6 +560,15 @@ class LogManagementView(View):
             query = Q()
             if uid:
                 query &= Q(uid=uid)
+            if storage_code:
+                # 同一单号都为uid或序列号
+                uid_qs = DeviceScheme.objects.filter(storage_code=storage_code).\
+                    values_list('serial_number', flat=True)
+                uid_list = list(uid_qs)
+                # 序列号,查询uid
+                if uid_list and len(uid_list[0]) == 9:
+                    uid_list = CommonService.get_uids_by_serial_numbers(uid_list)
+                query &= Q(uid__in=uid_list)
             if device_type:
                 # 处理多个deviceType参数
                 device_types = [int(t.strip()) for t in device_type.split(',') if t.strip().isdigit()]
@@ -589,7 +599,7 @@ class LogManagementView(View):
             if is_page:
                 event_list = event_list[(page - 1) * line:page * line]
             
-            # 查询device_type对应的name,事件编码对应的事件
+            # 查询设备型号,异常信息,制作单信息
             for event in event_list:
                 device_type = DeviceTypeModel.objects.filter(type=event['device_type']).first()
                 if device_type:
@@ -603,7 +613,22 @@ class LogManagementView(View):
                     event['event_type'] = abnormal_event_code.event_type
                 else:
                     event['event'] = ''
-            
+
+                # 根据uid查序列号
+                serial_number = CommonService.get_serial_number_by_uid(event['uid'])
+                device_scheme_qs = DeviceScheme.objects.filter(serial_number=serial_number).values('storage_code')
+                if device_scheme_qs.exists():
+                    storage_code = device_scheme_qs[0]['storage_code']
+                    event['storage_code'] = storage_code
+                    products_scheme_qs = ProductsScheme.objects.filter(
+                        storage_code=storage_code).values(
+                        'main_controller', 'wifi', 'sensor', 'order_quantity', 'created_time')
+                    if products_scheme_qs.exists():
+                        event['scheme'] = '{}+{}+{}'.format(
+                            products_scheme_qs[0]['main_controller'], products_scheme_qs[0]['wifi'], products_scheme_qs[0]['sensor'])
+                        event['order_quantity'] = products_scheme_qs[0]['order_quantity']
+                        event['shipping_date'] = products_scheme_qs[0]['created_time']
+
             return response.json(0, {'list': list(event_list), 'total': count})
         except Exception as e:
             return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))

+ 27 - 0
Service/CommonService.py

@@ -871,6 +871,33 @@ GCqvlyw5dfxNA+EtxNE2wCW/LW7ENJlACgcfgPlBZtpLheWoZB/maw4=
         c_serial_info = c_serial_qs.values('uid__uid')
         return c_serial_info[0]['uid__uid']
 
+    @staticmethod
+    def get_uids_by_serial_numbers(serial_numbers):
+        """
+        根据多个序列号获取绑定uid列表
+        @param serial_numbers: 多个6位序列号列表
+        @return: uid列表
+        """
+        if not serial_numbers:
+            return []
+            
+        # 确保所有序列号都是6位
+        serial_list = [serial[:6] for serial in serial_numbers if serial]
+        if not serial_list:
+            return []
+            
+        # 查询所有匹配的序列号
+        c_serial_qs = UIDCompanySerialModel.objects.filter(company_serial__serial_number__in=serial_list)
+        
+        # 如果没有匹配记录,返回原序列号列表
+        if not c_serial_qs.exists():
+            return serial_numbers
+            
+        # 获取所有匹配的uid
+        uid_list = list(c_serial_qs.values_list('uid__uid', flat=True))
+        
+        return uid_list
+
     @staticmethod
     def get_serial_number_by_uid(uid):
         """