import logging from django.conf import settings from apps.jqr.choices import JqrSendGroupMsgIsOpenChoices, JqrSendGroupMsgSendUserTypeChoices, \ JqrSendGroupMsgSendTagTypeChoices from apps.jqr.ksy_http import Http from apps.jqr.models import JqrExternalUser, JqrHookUser, JqrNewUserSendGroupMsg, JqrExternalFollowUser from apps.jqr.ws import WS 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 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): # 发送新客欢迎 try: success, data = Http.get_new_user_msg(corpid, userid, external_userid=external_userid, uid=uid) if not success or data is None: logger.error(f'corpid: {corpid}, userid: {userid}, external_userid: {external_userid}, 发送新客欢迎失败') return False, '获取发送内容失败' transfer_data(data) status_code = WS.send_wx_work_msg(data) success = status_code == 200 logger.info( f'corpid: {corpid}, userid: {userid}, external_userid: {external_userid},发送新客欢迎消息成功状态:{success}') if not success: return False, '发送新客欢迎消息失败' return success, '' except Exception as e: logger.error(f'corpid: {corpid}, userid: {userid}, external_userid: {external_userid}, 发送新客欢迎失败: {e}') return False, '发送新客欢迎消息失败'