60 lines
2.0 KiB
Python
60 lines
2.0 KiB
Python
import json
|
|
from asgiref.sync import sync_to_async, async_to_sync
|
|
from channels.db import database_sync_to_async
|
|
from channels.generic.websocket import AsyncJsonWebsocketConsumer
|
|
|
|
@database_sync_to_async
|
|
def _get_message_unread_count(user):
|
|
"""获取用户的未读消息数量"""
|
|
from apps.lymessages.models import MyMessageUser
|
|
count = MyMessageUser.objects.filter(revuserid=user, is_read=False, is_delete=False).count()
|
|
return count or 0
|
|
|
|
def set_message(sender, msg_type, msg, unread=0):
|
|
text = {
|
|
'sender': sender,
|
|
'msg_type': msg_type,
|
|
'content': msg,
|
|
'unread': unread
|
|
}
|
|
return text
|
|
|
|
|
|
class NotificationConsumer(AsyncJsonWebsocketConsumer):
|
|
async def connect(self):
|
|
try:
|
|
self.user = self.scope.get('user',None)
|
|
room_name = "user_" + str(self.user.id)
|
|
self.room_group_name = f'notifications_{room_name}'
|
|
await self.channel_layer.group_add(
|
|
self.room_group_name,
|
|
self.channel_name
|
|
)
|
|
|
|
await self.accept("JWTLYADMIN")
|
|
|
|
unread_count = await _get_message_unread_count(self.user)
|
|
if unread_count == 0:
|
|
await self.send_json(set_message('system', 'SYS', f'{self.user.name},你好!消息通知已上线!'))
|
|
else:
|
|
await self.send_json(set_message('system', 'SYS', "请查看您的未读消息~",unread=unread_count))
|
|
except Exception as e:
|
|
await self.close()
|
|
|
|
async def receive(self, text_data=None, bytes_data=None, **kwargs):
|
|
pass
|
|
|
|
async def disconnect(self, close_code):
|
|
await self.channel_layer.group_discard(
|
|
self.room_group_name,
|
|
self.channel_name
|
|
)
|
|
|
|
try:
|
|
await self.close(close_code)
|
|
except Exception:
|
|
pass
|
|
|
|
async def push_message(self, event):
|
|
message = event['json']
|
|
await self.send(text_data=json.dumps(message)) |