| @@ -11,6 +11,7 @@ from utils.page_utils import pagination | ||
| 11 | 11 | from utils.error.errno_utils import UserStatusCode, MessageStatusCode | 
| 12 | 12 | from utils.error.response_utils import response | 
| 13 | 13 |  | 
| 14 | +from utils.redis.rmessage import set_system_message_read_info, get_system_message_read_info | |
| 14 | 15 | from utils.redis.rmessage import set_system_message_delete_info, get_system_message_delete_info | 
| 15 | 16 |  | 
| 16 | 17 |  | 
| @@ -28,23 +29,21 @@ def message_list_api(request): | ||
| 28 | 29 | for message in messages: | 
| 29 | 30 | msg_type = message['msg_type'] | 
| 30 | 31 | if msg_type == UserMessageInfo.SYSTEM: | 
| 32 | + read_message_ids = get_system_message_read_info(user_id) | |
| 31 | 33 | deleted_message_ids = get_system_message_delete_info(user_id) | 
| 32 | - type_messages = SystemMessageInfo.objects.filter( | |
| 34 | + type_unread_messages = SystemMessageInfo.objects.filter( | |
| 33 | 35 | status=True, | 
| 34 | 36 | ).exclude( | 
| 35 | - pk__in=deleted_message_ids, | |
| 37 | + pk__in=list(set(read_message_ids + deleted_message_ids)), | |
| 36 | 38 | ) | 
| 37 | 39 | else: | 
| 38 | - type_messages = UserMessageInfo.objects.filter( | |
| 40 | + type_unread_messages = UserMessageInfo.objects.filter( | |
| 39 | 41 | to_uid=user_id, | 
| 40 | 42 | msg_type=msg_type, | 
| 43 | + read=False, | |
| 41 | 44 | status=True, | 
| 42 | 45 | ) | 
| 43 | - type_messages = type_messages.order_by( | |
| 44 | - '-pk' | |
| 45 | - )[:settings.MESSAGE_NUM_PER_PAGE] | |
| 46 | - type_messages = [msg.msg_info(user_id) for msg in type_messages] | |
| 47 | - message['msg_list'] = type_messages | |
| 46 | + message['msg_unread_num'] = type_unread_messages.count() | |
| 48 | 47 | final_messages.append(message) | 
| 49 | 48 |  | 
| 50 | 49 |      return JsonResponse({ | 
| @@ -121,6 +120,7 @@ def message_type_read_api(request, msg_type=None): | ||
| 121 | 120 | if _all == 'true': # 系统消息全部读取 | 
| 122 | 121 | for msg in SystemMessageInfo.objects.filter(status=True): | 
| 123 | 122 | SystemMessageReadInfo.objects.get_or_create(user_id=user_id, msg_id=msg.pk) | 
| 123 | + get_system_message_read_info(user_id) | |
| 124 | 124 | else: | 
| 125 | 125 | if pk > 0: # 用户(点赞/评论)消息单个读取 | 
| 126 | 126 | UserMessageInfo.objects.filter(pk=pk, to_uid=user_id).update(read=True) | 
| @@ -24,4 +24,5 @@ LENSMAN_PHOTO_HAGGLE_TIMES = 'lensman:photo:haggle:times:%s:%s:%s' # STRING, | ||
| 24 | 24 | LENSMAN_PHOTO_ORDER_RECORD = 'lensman:photo:order:record:%s:%s' # STRING,摄影师照片购买记录,photo_id、user_id | 
| 25 | 25 |  | 
| 26 | 26 | # 系统消息相关 | 
| 27 | +SYSTEM_MESSAGE_READ_INFO = 'system:message:read:info:%s' # STRING,系统消息读取信息,user_id | |
| 27 | 28 | SYSTEM_MESSAGE_DELETED_INFO = 'system:message:deleted:info:%s' # STRING,系统消息删除信息,user_id | 
| @@ -2,9 +2,9 @@ | ||
| 2 | 2 |  | 
| 3 | 3 | from django.conf import settings | 
| 4 | 4 |  | 
| 5 | -from message.models import SystemMessageDeleteInfo | |
| 5 | +from message.models import SystemMessageReadInfo, SystemMessageDeleteInfo | |
| 6 | 6 |  | 
| 7 | -from utils.redis.rkeys import SYSTEM_MESSAGE_DELETED_INFO | |
| 7 | +from utils.redis.rkeys import SYSTEM_MESSAGE_READ_INFO, SYSTEM_MESSAGE_DELETED_INFO | |
| 8 | 8 |  | 
| 9 | 9 | import json | 
| 10 | 10 |  | 
| @@ -15,6 +15,19 @@ r = settings.REDIS_CACHE | ||
| 15 | 15 | # 系统消息相关 | 
| 16 | 16 |  | 
| 17 | 17 |  | 
| 18 | +def set_system_message_read_info(user_id): | |
| 19 | + """ 设置系统消息读取信息 """ | |
| 20 | + read_messages = SystemMessageReadInfo.objects.filter(user_id=user_id, status=True) | |
| 21 | + read_message_ids = [msg.msg_id for msg in read_messages] | |
| 22 | + r.setex(SYSTEM_MESSAGE_READ_INFO % user_id, settings.REDIS_EXPIRED_MONTH, json.dumps(read_message_ids)) | |
| 23 | + return read_message_ids | |
| 24 | + | |
| 25 | + | |
| 26 | +def get_system_message_read_info(user_id): | |
| 27 | + """ 获取系统消息读取信息 """ | |
| 28 | + return json.loads(r.get(SYSTEM_MESSAGE_READ_INFO % user_id) or '[]') or set_system_message_read_info(user_id) | |
| 29 | + | |
| 30 | + | |
| 18 | 31 | def set_system_message_delete_info(user_id): | 
| 19 | 32 | """ 设置系统消息删除信息 """ | 
| 20 | 33 | deleted_messages = SystemMessageDeleteInfo.objects.filter(user_id=user_id, status=True) |