From af56a72fc12e9acfcf56717207d3a2699df49db5 Mon Sep 17 00:00:00 2001 From: AKW <2497744746@qq.com> Date: Tue, 26 Dec 2023 10:05:06 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BD=AC=E5=8C=96=E5=A4=96=E9=83=A8=E7=94=A8?= =?UTF-8?q?=E6=88=B7Id?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/jqr/pubsub.py | 24 +++++++++++++++++++++++- apps/jqr/serializers.py | 9 +++++---- apps/msg/pubsub.py | 6 +++--- yzk_wechat_event/settings/constant.py | 2 +- 4 files changed, 32 insertions(+), 9 deletions(-) diff --git a/apps/jqr/pubsub.py b/apps/jqr/pubsub.py index e0773b9..a0a3fe6 100644 --- a/apps/jqr/pubsub.py +++ b/apps/jqr/pubsub.py @@ -35,6 +35,28 @@ class JQREventCallbackPubSub: handler(callback_data, corpinfo) +class JQREventNewUserCallbackPubSub: + rc = get_redis_connection() + + @classmethod + def publish(cls, data): + cls.rc.lpush(Constant.JQR_EVENT_NEW_USER_CALLBACK_PUBSUB_CHANNEL, json.dumps(data)) + + @classmethod + def event_callback_listener(cls): + while True: + data = cls.rc.brpop(Constant.JQR_EVENT_NEW_USER_CALLBACK_PUBSUB_CHANNEL, 5) + if data is None: + time.sleep(5) + continue + data = json.loads(data[1]) + callback_data = json.loads(data['data']) + corpinfo = data['corpinfo'] + handler = data['handler'] + handler = import_string(handler) + handler(callback_data, corpinfo) + + class JQRQrcodeCallbackPubSub: rc = get_redis_connection() @@ -60,7 +82,7 @@ class JQRQrcodeCallbackPubSub: if not settings.DEBUG: - t = Thread(target=JQREventCallbackPubSub.event_callback_listener) + t = Thread(target=JQREventNewUserCallbackPubSub.event_callback_listener) t.start() t2 = Thread(target=JQRQrcodeCallbackPubSub.qrcode_callback_listener) t2.start() diff --git a/apps/jqr/serializers.py b/apps/jqr/serializers.py index 0d6ab75..c35f0ec 100644 --- a/apps/jqr/serializers.py +++ b/apps/jqr/serializers.py @@ -2,11 +2,10 @@ import base64 import json from datetime import datetime -from django.utils.module_loading import import_string from rest_framework import serializers from apps.jqr.models import JqrHookUser -from apps.jqr.pubsub import JQREventCallbackPubSub +from apps.jqr.pubsub import JQREventNewUserCallbackPubSub, JQREventCallbackPubSub from apps.jqr.tasks import save_add_contact, delete_add_contact, edit_add_contact, save_add_contact_by_channel, \ edit_add_contact_by_channel, delete_add_contact_by_channel from apps.msg.models import TbMessage @@ -109,7 +108,7 @@ class WechatEncryptSerializer(serializers.Serializer): data['agentid'] = corp.agentid data['uid'] = corp.uid # save_add_contact.delay(data, corp.to_dict(['corpid', 'appsecret'])) - JQREventCallbackPubSub.publish({ + JQREventNewUserCallbackPubSub.publish({ 'handler': f'{save_add_contact_by_channel.__module__}.{save_add_contact_by_channel.__name__}', 'data': json.dumps(data), 'corpinfo': corp.to_dict(['corpid', 'appsecret']), @@ -153,7 +152,7 @@ class WechatEncryptSerializer(serializers.Serializer): data['agentid'] = corp.agentid data['uid'] = corp.uid # save_add_contact.delay(data, corp.to_dict(['corpid', 'appsecret'])) - JQREventCallbackPubSub.publish({ + JQREventNewUserCallbackPubSub.publish({ 'handler': f'{save_add_contact_by_channel.__module__}.{save_add_contact_by_channel.__name__}', 'data': json.dumps(data), 'corpinfo': corp.to_dict(['corpid', 'appsecret']), @@ -185,6 +184,8 @@ class WechatEncryptSerializer(serializers.Serializer): """ print('客户群创建事件') print(data) + corp = self.context.get('corp') + data['chat_id'] = data.pop('chatid') def handle_change_external_chat_update(self, data): """ diff --git a/apps/msg/pubsub.py b/apps/msg/pubsub.py index 3692328..cfd0fc9 100644 --- a/apps/msg/pubsub.py +++ b/apps/msg/pubsub.py @@ -43,6 +43,6 @@ class JQRMSGPubSub: cls.msg_list.clear() -if not settings.DEBUG: - t = Thread(target=JQRMSGPubSub.listen) - t.start() +# if not settings.DEBUG: +# t = Thread(target=JQRMSGPubSub.listen) +# t.start() diff --git a/yzk_wechat_event/settings/constant.py b/yzk_wechat_event/settings/constant.py index 70808c8..ca360e3 100644 --- a/yzk_wechat_event/settings/constant.py +++ b/yzk_wechat_event/settings/constant.py @@ -4,8 +4,8 @@ class Constant: WECHAT_WORKER_TOKEN = 'wechat:worker:token:' WECHAT_WORKER_TOKEN_EXPIRES = 6000 JQR_MSG_PUBSUB_CHANNEL = 'jqr:msg' + JQR_EVENT_NEW_USER_CALLBACK_PUBSUB_CHANNEL = 'jqr:event:new:user:cb' JQR_EVENT_CALLBACK_PUBSUB_CHANNEL = 'jqr:event:cb' - JQR_EVENT_CALLBACK_TYPE = '' JQR_QRCODE_PUBSUB_CHANNEL = 'jqr:qrcode' ONE = 1 TWO = 2