@@ -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) |