瀏覽代碼

设备版本信息新增清除缓存

zhangdongming 3 月之前
父節點
當前提交
7e608b513b
共有 1 個文件被更改,包括 42 次插入0 次删除
  1. 42 0
      Controller/UserDevice/DeviceVersionInfoController.py

+ 42 - 0
Controller/UserDevice/DeviceVersionInfoController.py

@@ -56,8 +56,50 @@ class DeviceVersionInfoView(View):
             return self.get_device_version_info(userID, request, request_dict, response)
         elif operation == 'validateUserDevice':
             return self.validateUserDevice(userID, request, request_dict, response)
+        elif operation == 'clearDeviceVersionCache':
+            return self.clear_device_version_cache(userID, request, request_dict, response)
         else:
             return response.json(414)
+    @classmethod
+    def clear_device_version_cache(cls, user_id, request, request_dict, response):
+        """
+        清除设备版本缓存
+        @param user_id: 用户ID
+        @param request: 请求对象
+        @param request_dict: 请求参数
+        @param response: 响应对象
+        @return: 响应结果
+        """
+        d_code = request_dict.get('d_code', None)
+        timestamp = request_dict.get('timestamp', None)
+
+        if not d_code and not timestamp:
+            return response.json(444)  # 错误代码:缺少必要参数
+
+        try:
+            LOGGER.info(f'清除缓存 user: {user_id}, d_code: {d_code}, timestamp: {timestamp}')
+            redis = RedisObject()
+            if d_code:
+                # 清除指定d_code的所有版本缓存
+                pattern = RedisKeyConstant.ZOSI_DEVICE_VERSION_INFO.value + '*' + d_code
+                matched_keys = redis.get_keys(pattern)  # 将结果赋值给 matched_keys
+                if matched_keys:
+                    for key in matched_keys:  # 使用正确的变量名
+                        redis.del_data(key)
+
+            if timestamp:
+                # 清除创建时间早于指定时间戳的缓存
+                devices = DeviceVersionInfo.objects.filter(created_time__lt=timestamp).values('d_code', 'software_ver')
+                for device in devices:
+                    key = RedisKeyConstant.ZOSI_DEVICE_VERSION_INFO.value + device['software_ver'] + device['d_code']
+                    redis.del_data(key)
+
+            return response.json(0, "缓存清除成功")
+
+        except Exception as e:
+            error_line = e.__traceback__.tb_lineno
+            LOGGER.error(f'清除缓存失败 user:{user_id}, error_line:{error_line}, error_msg:{repr(e)}')
+            return response.json(500, f'error_line:{error_line}, error_msg:{repr(e)}')
 
     @classmethod
     def get_device_version_info(cls, user_id, request, request_dict, response):