import time from django.views import View from Ansjer.config import LOGGER from Model.models import DeviceScheme, ProductsScheme from Service.CommonService import CommonService 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) elif operation == 'statistics': return self.statistics_device_scheme(request_dict, response) elif operation == 'getProductSchemeList': return self.get_product_scheme_list(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) device_type = request_dict.get("deviceType", None) phone_model = request_dict.get("phoneModel", None) if not all([storage_code, serial_number, phone_model, device_type]): return response.json(444) full_serial_number = serial_number # device_type = 0 时表示传的是uid if device_type != "0": serial_number = serial_number[0:9] 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}") return response.json(174, f"数据已存在, storage_code为: {storage_code}") now_time = int(time.time()) DeviceScheme.objects.create(storage_code=storage_code, serial_number=serial_number, full_serial_number=full_serial_number, device_type=device_type, 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: print(e) return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e))) @staticmethod def statistics_device_scheme(request_dict, response): """ 统计设备关联产品方案 @param request_dict: @param response: @return: """ try: storage_code = request_dict.get("storageCode", None) if not storage_code: return response.json(444) device_num = DeviceScheme.objects.filter(storage_code=storage_code).count() return response.json(0, {"storageCode": storage_code, "deviceNum": device_num}) except Exception as e: print(e) return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e))) @staticmethod def get_product_scheme_list(request_dict, response): order_number = request_dict.get('orderNumber', None) if not order_number: # 缺少订单号,返回错误码 return response.json(444) # 查询符合条件的方案,仅获取指定字段 scheme_qs = ProductsScheme.objects.filter(order_number=order_number).values( 'storage_code', 'sku', 'hw_version', 'product_model', 'order_quantity', 'remark' ) if not scheme_qs.exists(): # 没有查询到数据,返回对应错误码 return response.json(173) # 将QuerySet转换为列表(数组格式),便于前端解析 scheme_list = list(scheme_qs) # 返回成功状态码(0)和数据数组 return response.json(0, scheme_list)