소스 검색

全部已读增加清除缓存

zhuo 1 개월 전
부모
커밋
ab534ecdbf
1개의 변경된 파일37개의 추가작업 그리고 6개의 파일을 삭제
  1. 37 6
      Controller/EquipmentInfo.py

+ 37 - 6
Controller/EquipmentInfo.py

@@ -7,6 +7,8 @@ from django.views.generic.base import View
 
 from Model.models import Device_Info, Equipment_Info, UidPushModel
 from Model.models import Device_User
+from Ansjer.config import LOGGER
+from Object.RedisObject import RedisObject
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 from Service.CommonService import CommonService
@@ -97,17 +99,21 @@ class EquipmentInfo(View):
     def update_info(request_dict, userID, response):
         is_update_all = int(request_dict.get('is_update_all', 0))
         event_type = request_dict.get('eventType', None)
+        redis_obj = RedisObject()
+
         if is_update_all == 1:
-            kwargs = {
-                'device_user_id': userID,
-                'status': 0
-            }
+            kwargs = {'userID_id': userID, 'status': 0}
             if event_type:
                 kwargs['event_type'] = int(event_type)
             try:
                 EquipmentInfoService.all_read_equipment_info(**kwargs)
+
+                # 使用方法清除缓存
+                EquipmentInfo.clear_unread_message_cache(userID, redis_obj)
+
             except Exception as e:
-                print(repr(e))
+                error_line = e.__traceback__.tb_lineno
+                LOGGER.error(f'批量更新失败 user:{userID}, error_line:{error_line}, error_msg:{repr(e)}')
         else:
             id_list = request_dict.getlist('id[]', None)
             if id_list is None or len(id_list) < 1:
@@ -119,11 +125,36 @@ class EquipmentInfo(View):
                     ei_id = int(full_id[2:])
                     equipment_info_model = EquipmentInfoService.get_equipment_info_model_with_full_id(full_id)
                     equipment_info_model.objects.filter(id=ei_id).update(status=1)
+
+                    #  每条消息更新后也尝试清除缓存
+                    EquipmentInfo.clear_unread_message_cache(userID, redis_obj)
+
                 except Exception as e:
-                    print(repr(e))
+                    error_line = e.__traceback__.tb_lineno
+                    LOGGER.error(f'单条更新失败 user:{userID}, error_line:{error_line}, error_msg:{repr(e)}')
+                    continue
         return response.json(0)
 
     @staticmethod
+    def clear_unread_message_cache(userID, redis_obj):
+        """
+        清除用户未读消息缓存
+        :param userID: 用户ID
+        :param redis_obj: RedisObject 实例
+        :return: True/False
+        """
+        push_message_key = f'PUSH:MESSAGE:USER:{userID}'
+        try:
+            if not redis_obj.del_data(key=push_message_key):
+                LOGGER.info(f'[CACHE] Failed to delete Redis key: {push_message_key}')
+                return False
+            LOGGER.info(f'[CACHE] Successfully deleted Redis key: {push_message_key}')
+            return True
+        except Exception as e:
+            error_line = e.__traceback__.tb_lineno
+            LOGGER.error(f'清除缓存失败 user:{userID}, error_line:{error_line}, error_msg:{repr(e)}')
+            return False
+    @staticmethod
     def update_answer_status(request_dict, user_id, response):
         """
         更新一键通话消息状态为已接听