2023-12-26 16:47:55 +08:00
|
|
|
import logging
|
|
|
|
|
2024-01-02 17:21:18 +08:00
|
|
|
from django.conf import settings
|
|
|
|
|
2023-12-26 16:47:55 +08:00
|
|
|
from apps.jqr.choices import JqrSendGroupMsgIsOpenChoices, JqrSendGroupMsgSendUserTypeChoices, \
|
|
|
|
JqrSendGroupMsgSendTagTypeChoices
|
2023-12-27 15:21:02 +08:00
|
|
|
from apps.jqr.ksy_http import Http
|
2023-12-26 16:47:55 +08:00
|
|
|
from apps.jqr.models import JqrExternalUser, JqrHookUser, JqrNewUserSendGroupMsg, JqrExternalFollowUser
|
2023-12-27 15:21:02 +08:00
|
|
|
from apps.jqr.ws import WS
|
2023-12-26 16:47:55 +08:00
|
|
|
from apps.qc.models import QcCorpinfo
|
|
|
|
|
|
|
|
logger = logging.getLogger('apps')
|
|
|
|
|
|
|
|
|
|
|
|
def get_jqr_new_send_msg_info(corpid, userid, external_userid):
|
|
|
|
try:
|
|
|
|
external_user = JqrExternalUser.objects.get(corpid=corpid, external_userid=external_userid)
|
|
|
|
except JqrExternalUser.DoesNotExist:
|
|
|
|
logger.error(f'corpid: {corpid}, external_userid: {external_userid}, 新客欢迎external_user不存在')
|
|
|
|
return
|
|
|
|
if not external_user.vid:
|
|
|
|
logger.error(f'corpid: {corpid}, external_userid: {external_userid}, 新客欢迎external_user没有vid')
|
|
|
|
return
|
|
|
|
try:
|
|
|
|
hook_user = JqrHookUser.objects.get(corpid=corpid, userid=userid)
|
|
|
|
except JqrHookUser.DoesNotExist:
|
|
|
|
logger.error(f'corpid: {corpid}, userid: {userid}, 新客欢迎hook_user不存在')
|
|
|
|
return
|
|
|
|
|
|
|
|
if not hook_user.new_user:
|
|
|
|
logger.error(f'corpid: {corpid}, userid: {userid}, 新客欢迎hook_user没有开启新客欢迎')
|
|
|
|
return
|
|
|
|
settletaggroupid = ''
|
|
|
|
uid = hook_user.uid
|
|
|
|
corpid = hook_user.corpid
|
|
|
|
hook_user_userid = hook_user.userid
|
|
|
|
corp_info = QcCorpinfo.objects.filter(corpid=corpid, uid=uid).first()
|
|
|
|
if corp_info:
|
|
|
|
settletaggroupid = corp_info.settletaggroupid
|
|
|
|
jqr_new_user_send_msg_list = JqrNewUserSendGroupMsg.objects.filter(uid=uid,
|
|
|
|
isopen=JqrSendGroupMsgIsOpenChoices.OPEN).all()
|
|
|
|
jqr_new_user_send_group_msg = None
|
|
|
|
for send_msg in jqr_new_user_send_msg_list:
|
|
|
|
if send_msg.sendusertype == JqrSendGroupMsgSendUserTypeChoices.ALL:
|
|
|
|
jqr_new_user_send_group_msg = send_msg
|
|
|
|
break
|
|
|
|
elif send_msg.sendusertype == JqrSendGroupMsgSendUserTypeChoices.CORP_PART:
|
|
|
|
if send_msg.senduserids and any([senduserid.get('corpid') for senduserid in send_msg.senduserids]):
|
|
|
|
jqr_new_user_send_group_msg = send_msg
|
|
|
|
break
|
|
|
|
elif send_msg.sendusertype == JqrSendGroupMsgSendUserTypeChoices.CORP_USER:
|
|
|
|
if send_msg.senduserids and any(
|
|
|
|
[senduserid.get('corpid') and senduserid.get('userid') for senduserid in send_msg.senduserids]):
|
|
|
|
jqr_new_user_send_group_msg = send_msg
|
|
|
|
break
|
|
|
|
send_msg_list = jqr_new_user_send_group_msg.sendcontent
|
|
|
|
if not send_msg_list:
|
|
|
|
logger.error(f'corpid: {corpid}, userid: {userid}, ,新客欢迎配置内容不存在')
|
|
|
|
return
|
|
|
|
send_msg_list.sort(key=lambda msg: msg.get('sendcitylevels', {}).get('level'))
|
|
|
|
send_content = None
|
|
|
|
for send_msg in send_msg_list:
|
|
|
|
# 所有用户
|
|
|
|
send_msg_tag_type = send_msg.get('sendtag', {}).get('type')
|
|
|
|
if send_msg_tag_type == JqrSendGroupMsgSendTagTypeChoices.ALL_USER:
|
|
|
|
send_content = send_msg
|
|
|
|
break
|
|
|
|
# 满足任意标签的用户
|
|
|
|
elif send_msg_tag_type == JqrSendGroupMsgSendTagTypeChoices.CORP_TAGS:
|
|
|
|
# 查询用户的标签信息
|
|
|
|
try:
|
|
|
|
external_follow_user = JqrExternalFollowUser.objects.get(corpid=corpid, userid=hook_user_userid,
|
|
|
|
dtime__isnull=True)
|
|
|
|
except JqrExternalFollowUser.DoesNotExist:
|
|
|
|
logger.error(f'corpid: {corpid}, userid: {userid}, 新客欢迎external_follow_user不存在')
|
|
|
|
continue
|
|
|
|
sendtag_item = send_msg.get('sendtag', {}).get('item')
|
|
|
|
tags = list(filter(lambda tag: tag.get('corpid') == corpid, sendtag_item))
|
|
|
|
if not tags:
|
|
|
|
logger.error(f'corpid: {corpid}, userid: {hook_user_userid}, ,未找到标签')
|
|
|
|
continue
|
|
|
|
tag = tags[0]
|
|
|
|
tagids = [t.get('id') for t in tag.get('tags')]
|
|
|
|
if not tagids:
|
|
|
|
pass
|
2023-12-27 15:21:02 +08:00
|
|
|
|
|
|
|
|
2024-01-02 17:21:18 +08:00
|
|
|
msgtype_content_map = {
|
|
|
|
1: {
|
|
|
|
'key': 'textMsgContent',
|
|
|
|
'replace_keys': None
|
|
|
|
},
|
|
|
|
2: {
|
|
|
|
'key': 'imgMsgContent',
|
|
|
|
'replace_keys': ['url']
|
|
|
|
},
|
|
|
|
3: {
|
|
|
|
'key': 'videoMsgContent',
|
|
|
|
'replace_keys': ['videoUrl', 'imgUrl']
|
|
|
|
},
|
|
|
|
4: {
|
|
|
|
'key': 'mimiProgramMsgContent',
|
|
|
|
'replace_keys': ['imgUrl']
|
|
|
|
},
|
|
|
|
5: {
|
|
|
|
'key': 'linkMsgContent',
|
|
|
|
'replace_keys': ['imgUrl']
|
|
|
|
},
|
|
|
|
6: {
|
|
|
|
'key': 'feedVideoMsgContent',
|
|
|
|
'replace_keys': ['avatar', 'coverUrl', 'thumbUrl', 'url']
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
def transfer_data(data):
|
|
|
|
msg_list = data.get('msgList')
|
|
|
|
for msg in msg_list:
|
|
|
|
msg_type = msg.get('msgType')
|
|
|
|
content_map = msgtype_content_map.get(msg_type)
|
|
|
|
content_key = content_map.get('key')
|
|
|
|
replace_keys = content_map.get('replace_keys')
|
|
|
|
content = msg.get(content_key)
|
|
|
|
if not replace_keys:
|
|
|
|
continue
|
|
|
|
if content and isinstance(content, dict):
|
|
|
|
for replace_key in replace_keys:
|
|
|
|
if not content[replace_key].startswith('http'):
|
|
|
|
content[replace_key] = f'{settings.CDN_URL}{content[replace_key]}'
|
|
|
|
|
|
|
|
|
|
|
|
def send_new_user_msg(corpid, userid, external_userid=None, chat_id=None, uid=None):
|
2023-12-27 15:21:02 +08:00
|
|
|
# 发送新客欢迎
|
|
|
|
try:
|
2024-01-02 17:21:18 +08:00
|
|
|
success, data = Http.get_new_user_msg(corpid, userid, external_userid=external_userid, uid=uid)
|
|
|
|
if not success or data is None:
|
2023-12-27 15:21:02 +08:00
|
|
|
logger.error(f'corpid: {corpid}, userid: {userid}, external_userid: {external_userid}, 发送新客欢迎失败')
|
2024-01-02 17:21:18 +08:00
|
|
|
return False, '获取发送内容失败'
|
|
|
|
transfer_data(data)
|
2023-12-27 15:21:02 +08:00
|
|
|
status_code = WS.send_wx_work_msg(data)
|
2023-12-27 15:26:58 +08:00
|
|
|
success = status_code == 200
|
|
|
|
logger.info(
|
2024-01-02 17:21:18 +08:00
|
|
|
f'corpid: {corpid}, userid: {userid}, external_userid: {external_userid},发送新客欢迎消息成功状态:{success}')
|
|
|
|
if not success:
|
|
|
|
return False, '发送新客欢迎消息失败'
|
|
|
|
return success, ''
|
2023-12-27 15:21:02 +08:00
|
|
|
except Exception as e:
|
2024-01-02 17:21:18 +08:00
|
|
|
logger.error(f'corpid: {corpid}, userid: {userid}, external_userid: {external_userid}, 发送新客欢迎失败: {e}')
|
|
|
|
return False, '发送新客欢迎消息失败'
|