| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 | # -*- encoding: utf-8 -*-"""@File    : DeviceVersionInfoController.py@Time    : 2024/11/20 14:20@Author  : stephen@Email   : zhangdongming@asj6.wecom.work@Software: PyCharm"""import jsonfrom django.http import QueryDictfrom django.views import Viewfrom Ansjer.config import LOGGERfrom Model.models import DeviceVersionInfofrom Object.Enums.RedisKeyConstant import RedisKeyConstantfrom Object.RedisObject import RedisObjectfrom Object.ResponseObject import ResponseObjectfrom Object.TokenObject import TokenObjectfrom Service.CommonService import CommonServiceclass DeviceVersionInfoView(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')        tko = TokenObject(request.META.get('HTTP_AUTHORIZATION'))        if tko.code != 0:            return response.json(tko.code)        response.lang = tko.lang        userID = tko.userID        if operation == 'getInfo':            return self.get_device_version_info(userID, request, request_dict, response)        else:            return response.json(414)    @classmethod    def get_device_version_info(cls, user_id, request, request_dict, response):        # 从请求字典中获取uid和version        uid = request_dict.get('uid')        version = request_dict.get('version')        # 检查version是否存在        if not version:            return response.json(444)  # 错误代码:没有提供version        try:            # 示例输入字符串            ip = CommonService.get_ip_address(request)            LOGGER.info(f'获取设备版本配置信息 user: {user_id}, uid: {uid}, version: {version}, ip: {ip} ')            # 从右侧分割字符串,获取版本和设备代码            ver, d_code = version.rsplit('.', 1)  # 使用从右到左分割            ver = ver.replace('V', '')  # 移除版本前的'V'            # 创建Redis对象            redis = RedisObject()            # 构建Redis键            version_key = RedisKeyConstant.ZOSI_DEVICE_VERSION_INFO.value + ver + d_code            # 尝试从Redis中获取数据            version_info = redis.get_data(version_key)            if version_info:                # 如果在Redis中找到了数据,直接返回                return response.json(0, json.loads(version_info))            # 从数据库查询设备版本信息            device_version_qs = DeviceVersionInfo.objects.filter(d_code=d_code, software_ver=ver).values()            if not device_version_qs.exists():                return response.json(173)  # 错误代码:未找到设备版本信息            # 从QuerySet中获取设备信息            device_info = device_version_qs            # 将设备信息序列化为JSON            device_json = json.dumps(device_info[0])            # 将数据写入Redis,以便后续使用            redis.set_data(version_key, device_json, 60 * 60 * 24)  # 设置TTL为24小时            # 返回设备信息            return response.json(0, device_info[0])        except Exception as e:            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
 |