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