From 28313b0c33edac5b606175425c331f70166762a3 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Tue, 5 Sep 2023 11:12:13 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96ws=20event=20ticket?= =?UTF-8?q?=20remind=E4=B8=89=E7=A7=8D=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/ecm/tasks.py | 22 ++++++++++++++++++++-- apps/wf/tasks.py | 9 ++++++--- apps/ws/consumers.py | 18 +++++++++++++++++- 3 files changed, 43 insertions(+), 6 deletions(-) diff --git a/apps/ecm/tasks.py b/apps/ecm/tasks.py index 808fbaa9..471597f9 100644 --- a/apps/ecm/tasks.py +++ b/apps/ecm/tasks.py @@ -25,6 +25,7 @@ from apps.ai.main import algo_dict from datetime import datetime import uuid from apps.utils.img import compress_image +from apps.ecm.serializers import EventSerializer @shared_task(base=CustomTask) def store_img(code: str, duration: int): @@ -205,10 +206,27 @@ def compressed_all_ecm_image(): event.save() @shared_task(base=CustomTask) -def remind_push(userId: str): +def remind_push(remindId: str): + from apps.ecm.models import Remind + from apps.ecm.serializers import RemindSerializer + remind = Remind.objects.get(id=remindId) + + channel_layer = get_channel_layer() + data = { + 'type': 'remind', + 'remind': RemindSerializer(instance=remind).data, + 'msg': '' + } + async_to_sync(channel_layer.group_send)(f"user_{remind.recipient.id}", data) + + +@shared_task(base=CustomTask) +def event_push(eventId: str): + event = Event.objects.get(id=eventId) channel_layer = get_channel_layer() data = { 'type': 'event', + 'event': EventSerializer(instance=event).data, 'msg': '' } - async_to_sync(channel_layer.group_send)(f"user_{userId}", data) \ No newline at end of file + async_to_sync(channel_layer.group_send)('event', data) \ No newline at end of file diff --git a/apps/wf/tasks.py b/apps/wf/tasks.py index 020bc954..97df25e9 100644 --- a/apps/wf/tasks.py +++ b/apps/wf/tasks.py @@ -8,6 +8,7 @@ from apps.utils.sms import send_sms from apps.utils.tasks import CustomTask from celery import shared_task from apps.wf.models import State, Ticket, TicketFlow, Transition +from apps.wf.serializers import TicketDetailSerializer import time from apps.utils.tasks import send_mail_task from channels.layers import get_channel_layer @@ -16,10 +17,12 @@ from asgiref.sync import async_to_sync myLogger = logging.getLogger('log') @shared_task(base=CustomTask) -def ticket_push(userId): +def ticket_push(ticketId, userId): + ticket = Ticket.objects.get(id=ticketId) channel_layer = get_channel_layer() data = { 'type': 'ticket', + 'ticket': TicketDetailSerializer(instance=ticket).data, 'msg': '' } async_to_sync(channel_layer.group_send)(f"user_{userId}", data) @@ -36,13 +39,13 @@ def send_ticket_notice(ticket_id): # ws推送 # 发送短信通知 pt = User.objects.filter(id=ticket.participant).first() - ticket_push.delay(pt.id) + ticket_push.delay(ticket.id, pt.id) if pt and pt.phone: send_sms(pt.phone, 1002, params) elif ticket.participant_type == 2: pts = User.objects.filter(id__in=ticket.participant) for i in pts: - ticket_push.delay(pt.id) + ticket_push.delay(ticket.id, i.id) if i.phone: send_sms(i.phone, 1002, params) diff --git a/apps/ws/consumers.py b/apps/ws/consumers.py index 75788a7a..1684dbe3 100644 --- a/apps/ws/consumers.py +++ b/apps/ws/consumers.py @@ -58,22 +58,38 @@ class MyConsumer(AsyncWebsocketConsumer): await self.channel_layer.group_send( self.room_group_name, { - 'type': 'event', + 'type': 'remind', 'msg': '你好,' + self.scope['user'].username, 'from': '系统' } ) await self.accept() + async def receive(self, text_data=None, bytes_data=None): + if text_data: + content = json.loads(text_data) + if content['type'] == 'event': + await self.channel_layer.group_add( + 'event', + self.channel_name + ) + async def disconnect(self, close_code): # Leave room group await self.channel_layer.group_discard( self.room_group_name, self.channel_name ) + await self.channel_layer.group_discard( + 'event', + self.channel_name + ) async def event(self, content): await self.send(json.dumps(content, ensure_ascii=False)) async def ticket(self, content): await self.send(json.dumps(content, ensure_ascii=False)) + + async def remind(self, content): + await self.send(json.dumps(content, ensure_ascii=False))