|
@@ -419,96 +419,132 @@ class ProductsSchemeManageView(View):
|
|
|
@param response: 响应对象
|
|
|
@return: 响应对象包含设备方案列表
|
|
|
"""
|
|
|
- serial_number = request_dict.get("serialNumber", None)
|
|
|
- storage_code = request_dict.get("storageCode", None)
|
|
|
- device_type = request_dict.get("deviceType", None)
|
|
|
- phone_model = request_dict.get("phoneModel", None)
|
|
|
- page = request_dict.get("page", 1)
|
|
|
- page_size = request_dict.get("pageSize", 20)
|
|
|
+ # 提取请求参数并提供默认值
|
|
|
+ filters = {
|
|
|
+ 'serial_number': request_dict.get("serialNumber"),
|
|
|
+ 'storage_code': request_dict.get("storageCode"),
|
|
|
+ 'device_type': request_dict.get("deviceType"),
|
|
|
+ 'phone_model': request_dict.get("phoneModel"),
|
|
|
+ }
|
|
|
+ page = int(request_dict.get("page", 1))
|
|
|
+ page_size = int(request_dict.get("pageSize", 20))
|
|
|
|
|
|
try:
|
|
|
- # 获取设备方案查询集
|
|
|
- device_scheme_qs = DeviceScheme.objects.all()
|
|
|
-
|
|
|
- # 过滤条件
|
|
|
- if serial_number:
|
|
|
- device_scheme_qs = device_scheme_qs.filter(serial_number=serial_number)
|
|
|
- if storage_code:
|
|
|
- device_scheme_qs = device_scheme_qs.filter(storage_code__icontains=storage_code)
|
|
|
- if device_type:
|
|
|
- device_scheme_qs = device_scheme_qs.filter(device_type=device_type)
|
|
|
- if phone_model:
|
|
|
- device_scheme_qs = device_scheme_qs.filter(phone_model__icontains=phone_model)
|
|
|
-
|
|
|
- # 分页
|
|
|
- paginator = Paginator(device_scheme_qs.order_by('-created_time'), page_size)
|
|
|
- device_schemes = paginator.page(page)
|
|
|
-
|
|
|
- # 构建返回数据
|
|
|
+ # 构建基础查询集
|
|
|
+ queryset = DeviceScheme.objects.all().order_by('-created_time')
|
|
|
+
|
|
|
+ # 应用过滤条件
|
|
|
+ if filters['serial_number']:
|
|
|
+ queryset = queryset.filter(serial_number=filters['serial_number'])
|
|
|
+ if filters['storage_code']:
|
|
|
+ queryset = queryset.filter(storage_code__icontains=filters['storage_code'])
|
|
|
+ if filters['device_type']:
|
|
|
+ queryset = queryset.filter(device_type=filters['device_type'])
|
|
|
+ if filters['phone_model']:
|
|
|
+ queryset = queryset.filter(phone_model__icontains=filters['phone_model'])
|
|
|
+
|
|
|
+ # 分页处理
|
|
|
+ paginator = Paginator(queryset, page_size)
|
|
|
+ try:
|
|
|
+ current_page = paginator.page(page)
|
|
|
+ except EmptyPage:
|
|
|
+ current_page = paginator.page(paginator.num_pages)
|
|
|
+
|
|
|
+ # 批量预取关联数据
|
|
|
device_list = []
|
|
|
- for device in device_schemes.object_list:
|
|
|
- # 获取关联的产品方案信息
|
|
|
- product_scheme = ProductsScheme.objects.filter(storage_code=device.storage_code).first()
|
|
|
-
|
|
|
- device_type_qs = DeviceTypeModel.objects.filter(type=device.device_type).values('name')
|
|
|
- device_name = device.device_type
|
|
|
- if device_type_qs.exists():
|
|
|
- device_name = device_type_qs[0]['name']
|
|
|
- status = 'N/A'
|
|
|
- if device.device_type != 0:
|
|
|
- serial_qs = CompanySerialModel.objects.filter(serial_number=device.serial_number[0:6]).values(
|
|
|
- 'status')
|
|
|
- status = '已激活' if serial_qs.exists() and serial_qs[0]['status'] > 1 else '未激活'
|
|
|
- device_data = {
|
|
|
- 'id': device.id,
|
|
|
- 'serialNumber': device.serial_number,
|
|
|
- 'deviceType': device_name,
|
|
|
- 'phoneModel': device.phone_model,
|
|
|
- 'storageCode': device.storage_code,
|
|
|
- 'createdTime': device.created_time,
|
|
|
- 'updatedTime': device.updated_time,
|
|
|
- 'snStatus': status
|
|
|
+ if current_page.object_list:
|
|
|
+ # 准备批量查询所需数据
|
|
|
+ storage_codes = {device.storage_code for device in current_page}
|
|
|
+ serial_prefixes = {device.serial_number[:6] for device in current_page}
|
|
|
+ device_types = {device.device_type for device in current_page}
|
|
|
+
|
|
|
+ # 批量获取关联数据
|
|
|
+ product_schemes_map = {
|
|
|
+ ps.storage_code: ps
|
|
|
+ for ps in ProductsScheme.objects.filter(storage_code__in=storage_codes)
|
|
|
+ }
|
|
|
+ device_type_names = {
|
|
|
+ dt['type']: dt['name']
|
|
|
+ for dt in DeviceTypeModel.objects.filter(type__in=device_types).values('type', 'name')
|
|
|
}
|
|
|
- if product_scheme:
|
|
|
- # 提取需要拼接的字段值(按顺序)
|
|
|
- scheme_fields = [
|
|
|
- product_scheme.flash,
|
|
|
- product_scheme.ddr,
|
|
|
- product_scheme.main_controller,
|
|
|
- product_scheme.wifi,
|
|
|
- product_scheme.four_g,
|
|
|
- product_scheme.ad,
|
|
|
- product_scheme.phy,
|
|
|
- product_scheme.sensor
|
|
|
- ]
|
|
|
-
|
|
|
- # 过滤空值并拼接为字符串
|
|
|
- scheme_data = '+'.join([str(field) for field in scheme_fields if field])
|
|
|
-
|
|
|
- device_data.update({
|
|
|
- 'orderNumber': product_scheme.order_number if product_scheme.order_number else '',
|
|
|
- 'type': 'NVR' if product_scheme.device_type == 1 else 'IPC',
|
|
|
- 'flash': product_scheme.flash if product_scheme.flash else '',
|
|
|
- 'ddr': product_scheme.ddr if product_scheme.ddr else '',
|
|
|
- 'mainController': product_scheme.main_controller if product_scheme.main_controller else '',
|
|
|
- 'wifi': product_scheme.wifi if product_scheme.wifi else '',
|
|
|
- 'fourG': product_scheme.four_g if product_scheme.four_g else '',
|
|
|
- 'ad': product_scheme.ad if product_scheme.ad else '',
|
|
|
- 'phy': product_scheme.phy if product_scheme.phy else '',
|
|
|
- 'sensor': product_scheme.sensor if product_scheme.sensor else '',
|
|
|
- 'orderQuantity': product_scheme.order_quantity if product_scheme.order_quantity else '',
|
|
|
- 'customerCode': product_scheme.customer_code if product_scheme.customer_code else '',
|
|
|
- 'schemeData': scheme_data,
|
|
|
- 'remark': product_scheme.remark if product_scheme.remark else ''
|
|
|
- })
|
|
|
- device_list.append(device_data)
|
|
|
-
|
|
|
- data = {
|
|
|
+ serial_statuses = {
|
|
|
+ cs.serial_number: cs
|
|
|
+ for cs in CompanySerialModel.objects.filter(serial_number__in=serial_prefixes)
|
|
|
+ }
|
|
|
+
|
|
|
+ # 构建设备数据
|
|
|
+ device_list = [
|
|
|
+ ProductsSchemeManageView.build_device_data(
|
|
|
+ device,
|
|
|
+ product_schemes_map.get(device.storage_code),
|
|
|
+ device_type_names.get(device.device_type, device.device_type),
|
|
|
+ serial_statuses.get(device.serial_number[:6])
|
|
|
+ )
|
|
|
+ for device in current_page
|
|
|
+ ]
|
|
|
+
|
|
|
+ return response.json(0, {
|
|
|
'list': device_list,
|
|
|
- 'total': paginator.count,
|
|
|
- }
|
|
|
+ 'total': paginator.count
|
|
|
+ })
|
|
|
|
|
|
- return response.json(0, data)
|
|
|
except Exception as e:
|
|
|
- print(e)
|
|
|
- return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
|
|
|
+ LOGGER.error("设备方案列表查询异常")
|
|
|
+ return response.json(500, f'服务器错误: {str(e)}')
|
|
|
+
|
|
|
+ @staticmethod
|
|
|
+ def build_device_data(device, product_scheme, device_type_name, serial_status):
|
|
|
+ """构建单个设备数据字典"""
|
|
|
+ # 设备基础数据
|
|
|
+ device_data = {
|
|
|
+ 'id': device.id,
|
|
|
+ 'serialNumber': device.serial_number,
|
|
|
+ 'deviceType': device_type_name,
|
|
|
+ 'phoneModel': device.phone_model,
|
|
|
+ 'storageCode': device.storage_code,
|
|
|
+ 'createdTime': device.created_time,
|
|
|
+ 'updatedTime': device.updated_time,
|
|
|
+ 'snStatus': 'N/A',
|
|
|
+ 'aTime': 'N/A',
|
|
|
+ }
|
|
|
+
|
|
|
+ # 序列号激活信息
|
|
|
+ if device.device_type != 0 and serial_status:
|
|
|
+ device_data['snStatus'] = '已激活' if serial_status.status > 1 else '未激活'
|
|
|
+ device_data['aTime'] = datetime.datetime.fromtimestamp(
|
|
|
+ serial_status.update_time
|
|
|
+ ).strftime('%Y-%m-%d %H:%M:%S')
|
|
|
+
|
|
|
+ # 添加产品方案信息
|
|
|
+ if product_scheme:
|
|
|
+ # 构建方案数据字符串
|
|
|
+ scheme_parts = [
|
|
|
+ product_scheme.flash,
|
|
|
+ product_scheme.ddr,
|
|
|
+ product_scheme.main_controller,
|
|
|
+ product_scheme.wifi,
|
|
|
+ product_scheme.four_g,
|
|
|
+ product_scheme.ad,
|
|
|
+ product_scheme.phy,
|
|
|
+ product_scheme.sensor
|
|
|
+ ]
|
|
|
+ scheme_data = '+'.join(filter(None, map(str, scheme_parts)))
|
|
|
+
|
|
|
+ device_data.update({
|
|
|
+ 'orderNumber': product_scheme.order_number or '',
|
|
|
+ 'type': 'NVR' if product_scheme.device_type == 1 else 'IPC',
|
|
|
+ 'flash': product_scheme.flash or '',
|
|
|
+ 'ddr': product_scheme.ddr or '',
|
|
|
+ 'mainController': product_scheme.main_controller or '',
|
|
|
+ 'wifi': product_scheme.wifi or '',
|
|
|
+ 'fourG': product_scheme.four_g or '',
|
|
|
+ 'ad': product_scheme.ad or '',
|
|
|
+ 'phy': product_scheme.phy or '',
|
|
|
+ 'sensor': product_scheme.sensor or '',
|
|
|
+ 'orderQuantity': product_scheme.order_quantity or '',
|
|
|
+ 'customerCode': product_scheme.customer_code or '',
|
|
|
+ 'schemeData': scheme_data,
|
|
|
+ 'remark': product_scheme.remark or ''
|
|
|
+ })
|
|
|
+
|
|
|
+ return device_data
|