94 lines
3.5 KiB
Python
94 lines
3.5 KiB
Python
from celery import shared_task
|
|
from datetime import datetime
|
|
import logging
|
|
|
|
from apps.jqr.choices import JqrWechatbizuserinfoDeleteTypeChoices, JqrAddTypeChoices
|
|
from apps.qc.choices import QcWechatbizeventAddcontactIsDeleteChoices
|
|
from apps.qc.models import QcWechatbizeventAddcontact
|
|
from apps.jqr.models import JqrExternalFollowUser, JqrExternalUser
|
|
from libs.wechat import WechatWorkerUtil
|
|
|
|
logger = logging.getLogger('apps')
|
|
|
|
|
|
@shared_task(name='save_add_contact', queue='contact')
|
|
def save_add_contact(data, corpinfo, *args, **kwargs):
|
|
state = data.get('state')
|
|
if state and state.startswith('mg') and '_' in state:
|
|
[_, _, qrcodeid] = state.split('_')
|
|
data['qrcodeid'] = qrcodeid
|
|
# TODO 处理我们自己的活码
|
|
userid = data.get('userid')
|
|
externaluserid = data.get('externaluserid')
|
|
corpid = data.get('corpid')
|
|
QcWechatbizeventAddcontact.objects.update_or_create(
|
|
userid=userid,
|
|
externaluserid=externaluserid,
|
|
corpid=corpid,
|
|
defaults={
|
|
**data,
|
|
'isdelete': QcWechatbizeventAddcontactIsDeleteChoices.NOT_DELETE,
|
|
'deletetime': None,
|
|
'ctime': datetime.now(),
|
|
}
|
|
)
|
|
edit_add_contact.delay(data, corpinfo, *args, **kwargs)
|
|
|
|
|
|
@shared_task(name='edit_add_contact', queue='contact')
|
|
def edit_add_contact(data, corpinfo, *args, **kwargs):
|
|
# 更新 关系表
|
|
externaluserid = data.get('externaluserid')
|
|
corpid = corpinfo.get('corpid')
|
|
appsecret = corpinfo.get('appsecret')
|
|
wechat_worker = WechatWorkerUtil(corpid, appsecret)
|
|
cursor = ''
|
|
while cursor is not None:
|
|
success, data = wechat_worker.get_external_contact(externaluserid, cursor=cursor)
|
|
if not success:
|
|
logger.error(f'获取外部联系人信息失败,{data}')
|
|
return
|
|
(external_contact, follow_user, cursor) = data
|
|
JqrExternalUser.objects.update_or_create(
|
|
corpid=corpid,
|
|
external_userid=externaluserid,
|
|
defaults={
|
|
**external_contact,
|
|
'addtype': JqrAddTypeChoices.EVENT_CALLBACK,
|
|
'deletetype': None,
|
|
'dtime': None
|
|
}
|
|
)
|
|
for follow_info in follow_user:
|
|
userid = follow_info.get('userid')
|
|
follow_info['tags'] = [tag.get('tag_id') for tag in follow_info.get('tags', [])]
|
|
JqrExternalFollowUser.objects.update_or_create(
|
|
userid=userid,
|
|
corpid=corpid,
|
|
external_userid=externaluserid,
|
|
defaults={
|
|
**follow_info,
|
|
'addtype': JqrAddTypeChoices.EVENT_CALLBACK,
|
|
'deletetype': None,
|
|
'dtime': None
|
|
}
|
|
)
|
|
|
|
|
|
@shared_task(name='delete_add_contact', queue='contact')
|
|
def delete_add_contact(data, corpinfo, *args, **kwargs):
|
|
userid = data.get('userid')
|
|
externaluserid = data.get('externaluserid')
|
|
corpid = data.get('corpid')
|
|
agentid = data.get('agentid')
|
|
# 更新add_contact 表删除字段
|
|
QcWechatbizeventAddcontact.objects.filter(userid=userid, externaluserid=externaluserid, corpid=corpid,
|
|
agentid=agentid).update(
|
|
isdelete=QcWechatbizeventAddcontactIsDeleteChoices.DELETED,
|
|
deletetime=datetime.now()
|
|
)
|
|
JqrExternalFollowUser.objects.filter(userid=userid, external_userid=externaluserid, corpid=corpid).update(
|
|
deletetype=JqrWechatbizuserinfoDeleteTypeChoices.EVENT_CALLBACK,
|
|
dtime=datetime.now()
|
|
)
|