123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- # -*- encoding: utf-8 -*-
- """
- @File : DeviceVersionInfoController.py
- @Time : 2024/11/20 14:20
- @Author : stephen
- @Email : zhangdongming@asj6.wecom.work
- @Software: PyCharm
- """
- import json
- from django.http import QueryDict
- from django.views import View
- from Ansjer.config import LOGGER
- from Model.models import DeviceVersionInfo
- from Object.Enums.RedisKeyConstant import RedisKeyConstant
- from Object.RedisObject import RedisObject
- from Object.ResponseObject import ResponseObject
- from Object.TokenObject import TokenObject
- from Service.CommonService import CommonService
- class 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)))
|