state修改

This commit is contained in:
AKW 2023-12-21 17:17:07 +08:00
parent b2cc43dd0c
commit 1022eee9a1
5 changed files with 66 additions and 18 deletions

View File

@ -5,6 +5,7 @@ from rest_framework import serializers
from apps.jqr.models import JqrHookUser from apps.jqr.models import JqrHookUser
from apps.jqr.tasks import save_add_contact, delete_add_contact, edit_add_contact from apps.jqr.tasks import save_add_contact, delete_add_contact, edit_add_contact
from apps.msg.models import TbMessage from apps.msg.models import TbMessage
from apps.msg.utils import JQRMSGPubSubUtils
from libs.weworkapi.callback.WXBizMsgCrypt3 import WXBizMsgCrypt, Prpcrypt from libs.weworkapi.callback.WXBizMsgCrypt3 import WXBizMsgCrypt, Prpcrypt
from utils.tools import sha1_encoder, get_attribute, camel_to_snake from utils.tools import sha1_encoder, get_attribute, camel_to_snake
from utils.base_serializer import BaseSerializer, CurrentIpDefault from utils.base_serializer import BaseSerializer, CurrentIpDefault
@ -91,10 +92,12 @@ class WechatEncryptSerializer(serializers.Serializer):
print('添加客户事件') print('添加客户事件')
corp = self.context.get('corp') corp = self.context.get('corp')
data.pop('tousername') data.pop('tousername')
data['corpid'] = corp.corpid
data['agentid'] = corp.agentid
data['uid'] = corp.uid
print(data) print(data)
state = data.get('state')
if state and state.startswith('mg') and '_' in state:
data['corpid'] = corp.corpid
data['agentid'] = corp.agentid
data['uid'] = corp.uid
save_add_contact.delay(data, corp.to_dict(['corpid', 'appsecret'])) save_add_contact.delay(data, corp.to_dict(['corpid', 'appsecret']))
def handle_change_external_contact_edit_external_contact(self, data): def handle_change_external_contact_edit_external_contact(self, data):
@ -104,10 +107,12 @@ class WechatEncryptSerializer(serializers.Serializer):
print('编辑客户事件') print('编辑客户事件')
corp = self.context.get('corp') corp = self.context.get('corp')
data.pop('tousername') data.pop('tousername')
data['corpid'] = corp.corpid
data['agentid'] = corp.agentid
data['uid'] = corp.uid
print(data) print(data)
state = data.get('state')
if state and state.startswith('mg') and '_' in state:
data['corpid'] = corp.corpid
data['agentid'] = corp.agentid
data['uid'] = corp.uid
edit_add_contact.delay(data, corp.to_dict(['corpid', 'appsecret'])) edit_add_contact.delay(data, corp.to_dict(['corpid', 'appsecret']))
def handle_change_external_contact_add_half_external_contact(self, data): def handle_change_external_contact_add_half_external_contact(self, data):
@ -117,10 +122,12 @@ class WechatEncryptSerializer(serializers.Serializer):
print('外部联系人免验证添加成员事件') print('外部联系人免验证添加成员事件')
corp = self.context.get('corp') corp = self.context.get('corp')
data.pop('tousername') data.pop('tousername')
data['corpid'] = corp.corpid
data['agentid'] = corp.agentid
data['uid'] = corp.uid
print(data) print(data)
state = data.get('state')
if state and state.startswith('mg') and '_' in state:
data['corpid'] = corp.corpid
data['agentid'] = corp.agentid
data['uid'] = corp.uid
save_add_contact.delay(data, corp.to_dict(['corpid', 'appsecret'])) save_add_contact.delay(data, corp.to_dict(['corpid', 'appsecret']))
def handle_change_external_contact_del_follow_user(self, data): def handle_change_external_contact_del_follow_user(self, data):
@ -130,10 +137,12 @@ class WechatEncryptSerializer(serializers.Serializer):
print('删除跟进成员事件') print('删除跟进成员事件')
corp = self.context.get('corp') corp = self.context.get('corp')
data.pop('tousername') data.pop('tousername')
data['corpid'] = corp.corpid
data['agentid'] = corp.agentid
data['uid'] = corp.uid
print(data) print(data)
state = data.get('state')
if state and state.startswith('mg') and '_' in state:
data['corpid'] = corp.corpid
data['agentid'] = corp.agentid
data['uid'] = corp.uid
delete_add_contact.delay(data, corp.to_dict(['corpid', 'appsecret'])) delete_add_contact.delay(data, corp.to_dict(['corpid', 'appsecret']))
def handle_change_external_chat_create(self, data): def handle_change_external_chat_create(self, data):
@ -182,6 +191,7 @@ class TbMessageModelSerializer(BaseSerializer):
model = TbMessage model = TbMessage
fields = '__all__' fields = '__all__'
# def create(self, validated_data): def create(self, validated_data):
# return TbMessage(**validated_data) JQRMSGPubSubUtils.publish(self.context.get('request').data)
return TbMessage(**validated_data)

View File

@ -23,4 +23,4 @@ data = {
for i in range(10): for i in range(10):
value_new = json.dumps(data) value_new = json.dumps(data)
rc.publish("jqr_msg", value_new) rc.publish("jqr:msg", value_new)

View File

@ -5,20 +5,21 @@ import json
rc = StrictRedis(host='localhost', port=6379, db=0) rc = StrictRedis(host='localhost', port=6379, db=0)
ps = rc.pubsub() ps = rc.pubsub()
ps.subscribe('jqr_msg') ps.subscribe('jqr:msg')
msg_list = [] msg_list = []
batch_size = 2
while True: while True:
for item in ps.listen(): for item in ps.listen():
if item['type'] == 'message': if item['type'] == 'message':
data = item.get('data') data = item.get('data')
print(data) print(data)
msg_list.append(data) msg_list.append(data)
if len(msg_list) >= 10: if len(msg_list) >= batch_size:
try: try:
time.sleep(1) time.sleep(1)
msg_list.clear() msg_list = msg_list[-batch_size:]
except Exception as e: except Exception as e:
print(e) print(e)
print(len(msg_list)) print(len(msg_list))

36
apps/msg/utils.py Normal file
View File

@ -0,0 +1,36 @@
import json
from redis import StrictRedis
from django.conf import settings
from threading import Thread
from apps.msg.models import TbMessage
from yzk_wechat_event.settings.constant import Constant
class JQRMSGPubSubUtils:
rc = StrictRedis(host=settings.REDIS_HOST, port=settings.REDIS_PORT, db=0)
msg_list = []
BATCH_SIZE = 10
@classmethod
def publish(cls, data):
cls.rc.publish(Constant.JQR_MSG_PUBSUB_CHANNEL, json.dumps(data))
def listen():
pubsub = JQRMSGPubSubUtils.rc.pubsub()
pubsub.subscribe(Constant.JQR_MSG_PUBSUB_CHANNEL)
for msg in pubsub.listen():
print(msg)
if msg['type'] == 'message':
data = msg.get('data')
data = json.dumps(str(data))
JQRMSGPubSubUtils.msg_list.append(data)
if len(JQRMSGPubSubUtils.msg_list) >= JQRMSGPubSubUtils.BATCH_SIZE:
TbMessage.objects.bulk_create(JQRMSGPubSubUtils.msg_list[JQRMSGPubSubUtils.BATCH_SIZE:])
JQRMSGPubSubUtils.msg_list = JQRMSGPubSubUtils.msg_list[JQRMSGPubSubUtils.BATCH_SIZE:]
# t = Thread(target=listen)
# t.start()

View File

@ -3,6 +3,7 @@ class Constant:
LOGIN_SMS = 'login:sms:' LOGIN_SMS = 'login:sms:'
WECHAT_WORKER_TOKEN = 'wechat:worker:token:' WECHAT_WORKER_TOKEN = 'wechat:worker:token:'
WECHAT_WORKER_TOKEN_EXPIRES = 6000 WECHAT_WORKER_TOKEN_EXPIRES = 6000
JQR_MSG_PUBSUB_CHANNEL = 'jqr:msg'
ONE = 1 ONE = 1
TWO = 2 TWO = 2
THREE = 3 THREE = 3